C/C++ 关于 SHA256 的使用

如下图,是关于 SHA256 使用的一个经典例子

c 复制代码
#include <openssl/sha.h>
#include <stdio.h>
#include <string.h>

int main() {
    char data[] = "Hello, world!"; // 要计算哈希的数据
    unsigned char hash[SHA256_DIGEST_LENGTH]; // 用于存储哈希结果的缓冲区

    SHA256_CTX sha256;
    SHA256_Init(&sha256);
    SHA256_Update(&sha256, data, strlen(data));
    SHA256_Final(hash, &sha256);

    printf("SHA-256 哈希值:");
    for(int i = 0; i < SHA256_DIGEST_LENGTH; i++) {
        printf("%02x", hash[i]);
    }
    printf("\n");

    return 0;
}

用来做哈希的数据除了可以是 "char [] 数组 / 字符串" 外,还可以是 int 数组,如下

c 复制代码
#include <openssl/sha.h>
#include <stdio.h>
#include <string.h>

int main() {

    // char data[] = "Hello, world!"; // 要计算哈希的数据
    
    int data[] = {1, 2, 3, 0, 4, 5, 6, 7}; // 要计算哈希的数据
    int counter = 8;
    unsigned char hash[SHA256_DIGEST_LENGTH]; // 用于存储哈希结果的缓冲区

    SHA256_CTX sha256;
    SHA256_Init(&sha256);
    SHA256_Update(&sha256, data, counter * 4);
    SHA256_Final(hash, &sha256);

    printf("SHA-256 哈希值:");
    for(int i = 0; i < SHA256_DIGEST_LENGTH; i++) {
        printf("%02x", hash[i]);
    }
    printf("\n");

    return 0;

}

如果我们不增加 counter,仅仅增加 int data[] 数组的长度和内容,那么计算出的哈希值是完全一样的。

在增加 int data[] 数组的长度和内容的同时,必须也要增加 counter,才可以得到不一样的哈希值。

这个过程中,0 数值并不会破坏 SHA256 的计算

相关推荐
charlee444 天前
CMake构建学习笔记17-uriparser库的构建和使用
学习·cmake·c/c++·uri
charlee444 天前
CMake构建学习笔记15-组建第一个程序项目
笔记·cmake·c/c++·构建
charlee446 天前
CMake构建学习笔记16-使用VS进行CMake项目的开发
cmake·c/c++·构建
帅得不敢出门14 天前
记录ssl epoll的tcp socket服务端在客户端断开时崩溃的问题
linux·网络·tcp/ip·socket·ssl·epoll·c/c++
charlee4417 天前
CMake构建学习笔记14-依赖库管理工具
cmake·管理·c/c++·构建
charlee4422 天前
CMake构建学习笔记11-minizip库的构建
cmake·c/c++·构建·libzip
Vera一笔画人生~1 个月前
嵌入式全栈开发学习笔记---数据结构(排序算法)
数据结构·stm32·单片机·嵌入式硬件·算法·排序算法·c/c++
小堃学编程2 个月前
Linux系统编程——线程控制
linux·开发语言·c/c++·线程控制·线程库·原生线程库·地址空间
charlee442 个月前
使用libzip压缩文件和文件夹
c/c++·压缩·libzip
Vera一笔画人生~2 个月前
stm32学习笔记---I2C通信协议(理论部分)
linux·数据结构·stm32·单片机·嵌入式硬件·51单片机·c/c++