1

我最近尝试在 C 中使用 openssl 进行 MD4 散列:MD4 hash with openssl, save result into char array。我想再做一次,但现在使用EVP_Digest. 但是有了这段代码,我的核心就被抛弃了——为什么?

#include <string.h>
#include <stdio.h>
#include <openssl/md4.h>

int main()
{
    unsigned char digest[MD4_DIGEST_LENGTH];
    char string[] = "hello world";

    EVP_Digest(string, strlen(string), digest, NULL, EVP_md4(), NULL);

    char mdString[MD4_DIGEST_LENGTH*2+1];
    int i;
    for( i = 0; i < MD4_DIGEST_LENGTH; i++)
         sprintf(&mdString[i*2], "%02x", (unsigned int)digest[i]);
    printf("md4 digest: %s\n", mdString);

    return 0;
}
4

1 回答 1

2

您正在传递一个NULL指针EVP_Digest作为输出长度变量。您需要执行以下操作:

unsigned int digestLen;
EVP_Digest(string, strlen(string), digest, &digestLen, EVP_md4(), NULL);

即使你不使用输出长度(你应该而不是依赖一个常量),你仍然需要为EVP_Digest函数提供一个有效的内存位置来写入大小值。

此外,您应该#include <openssl/evp.h>.

于 2013-08-13T22:12:32.293 回答