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