我最近尝试在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;
}发布于 2013-08-14 06:12:32
您正在将一个NULL指针作为输出长度变量传递给EVP_Digest。您需要执行以下操作:
unsigned int digestLen;
EVP_Digest(string, strlen(string), digest, &digestLen, EVP_md4(), NULL);即使不使用输出长度(应该使用常量而不是依赖常量),仍然需要为EVP_Digest函数提供一个有效的内存位置,以便将大小值写入其中。
此外,您应该使用#include <openssl/evp.h>。
https://stackoverflow.com/questions/18208612
复制相似问题