1
我想计算C中给定字符串的SHA1值。我通过#include <openssl/sha.h>
使用OpenSSL库。该计划的相关部分如下。 但它不应该导致任何问题。openssl/sha.h似乎计算错误的散列
void checkHash(char* tempString) {
unsigned char testHash[SHA_DIGEST_LENGTH];
unsigned char* sha1String = (unsigned char*)tempString;
SHA1(sha1String, sizeof(sha1String), testHash);
printf("String: %s\nActual hash: 86f7e437faa5a7fce15d1ddcb9eaeaea377667b8\nComputed hash: ", tempString);
// I verified the actual hash for "a" using multiple online hash generators.
for (i = 0; i < SHA_DIGEST_LENGTH; i++)
printf("%x", testHash[i]);
printf("\n");
}
运行程序与checkHash("a");
产生以下的输出:
String: a
Actual hash: 86f7e437faa5a7fce15d1ddcb9eaeaea377667b8
Computed hash: 16fac7d269b6674eda4d9cafee21bb486556527c
怎么会这些哈希值不匹配?我在一台64位Windows 7机器上运行64位Linux VM。这在过去为我造成了一些问题,但我怀疑这是使用OpenSSL版本的问题。
长度是问题,谢谢!尽管注意,'strlen'不会计算一个无符号的char *。所以使用该功能在这里不起作用。我只是用'1'手动传递来测试这是否是问题。 – TerekC