openssl / sha.h似乎计算错误的哈希值

时间:2013-12-08 20:08:50

标签: c openssl sha1

我正在尝试计算C中给定字符串的SHA1值。我通过#include <openssl/sha.h>使用OpenSSL库。该计划的相关部分如下。  但它不应该引起任何问题。

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版本的问题。

1 个答案:

答案 0 :(得分:4)

sizeof(sha1string)sizeof(unsigned char*)相同,即数据指针的大小。你想在那里传递字符串的长度,使用strlen代替sizeof,否则你不会散列你认为你正在散列的内容。

如果tempString不是以空字符结尾的字符串而是任意数据,则需要将数据的长度传递给checkHash,在这种情况下,无法从内部告知长度那个功能。