我最近尝试在C:MD4 hash with openssl, save result into char array中使用openssl进行MD4哈希处理。我想再次使用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;
}
答案 0 :(得分:2)
您正在将NULL
指针传递给EVP_Digest
作为输出长度变量。您需要执行以下操作:
unsigned int digestLen;
EVP_Digest(string, strlen(string), digest, &digestLen, EVP_md4(), NULL);
即使您不使用输出长度(您应该而不是依赖于常量),您仍然需要为EVP_Digest
函数提供有效的内存位置以将大小值写入。
另外,您应该#include <openssl/evp.h>
。