C - SHA256 生成不输出正确的散列?
C - SHA256 Generation does not output the correct hash?
我正在尝试生成哈希,但我总是得到不同的结果。
我的实现:
Pizza is great!
-> 86b01bb0cf966fec8f4864103538359cf5d9b6387ef710e02413a11dcce2e489
在线生成器:
Pizza is great!
-> 5f5c21c95db335c9e2cedd132e294102a8af08c1ddf81f41c9d54c421cfca1da
我使用的代码:
我不能为这个项目使用 OpenSSL,所以我使用这个 SHA256 实现:sha256.c sha256.h
int GenerateKey() {
unsigned char message[] = "Pizza is great!";
unsigned char hash[SHA256_BLOCK_SIZE];
SHA256_CTX ctx;
sha256_init(&ctx);
sha256_update(&ctx, message, sizeof(message));
sha256_final(&ctx, hash);
printf("SHA256 KEY\n\n\n\n\n");
int i;
for (i = 0; i < SHA256_BLOCK_SIZE; i++) {
printf("%02x", hash[i]);
}
printf("\n\n\n\n\n");
return 0;
}
如前所述,区别在于使用 sizeof(message)
和 strlen(message)
。
sizeof
声明的数组 (char message[]
) 包括字符串末尾的空值(值为 0 的终止字符),而 strlen
不包括终止空值。
查看此程序:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(){
char message[] = "Pizza is great!";
printf("sizeof(message) is %ld\n", sizeof(message));
printf("strlen(message) is %ld\n", strlen(message));
return 0;
}
输出为:
sizeof(message) is 16
strlen(message) is 15
顺便说一句,值得注意的是,您是这样声明字符串数组的:
char *message = "Pizza is great!"
并调用 sizeof(message)
,您将实际获得指针的大小,该大小取决于平台,为 4 或 8 个字节。
我正在尝试生成哈希,但我总是得到不同的结果。
我的实现:
Pizza is great!
-> 86b01bb0cf966fec8f4864103538359cf5d9b6387ef710e02413a11dcce2e489
在线生成器:
Pizza is great!
-> 5f5c21c95db335c9e2cedd132e294102a8af08c1ddf81f41c9d54c421cfca1da
我使用的代码:
我不能为这个项目使用 OpenSSL,所以我使用这个 SHA256 实现:sha256.c sha256.h
int GenerateKey() {
unsigned char message[] = "Pizza is great!";
unsigned char hash[SHA256_BLOCK_SIZE];
SHA256_CTX ctx;
sha256_init(&ctx);
sha256_update(&ctx, message, sizeof(message));
sha256_final(&ctx, hash);
printf("SHA256 KEY\n\n\n\n\n");
int i;
for (i = 0; i < SHA256_BLOCK_SIZE; i++) {
printf("%02x", hash[i]);
}
printf("\n\n\n\n\n");
return 0;
}
如前所述,区别在于使用 sizeof(message)
和 strlen(message)
。
sizeof
声明的数组 (char message[]
) 包括字符串末尾的空值(值为 0 的终止字符),而 strlen
不包括终止空值。
查看此程序:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(){
char message[] = "Pizza is great!";
printf("sizeof(message) is %ld\n", sizeof(message));
printf("strlen(message) is %ld\n", strlen(message));
return 0;
}
输出为:
sizeof(message) is 16
strlen(message) is 15
顺便说一句,值得注意的是,您是这样声明字符串数组的:
char *message = "Pizza is great!"
并调用 sizeof(message)
,您将实际获得指针的大小,该大小取决于平台,为 4 或 8 个字节。