如下图,是关于 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 的计算