【发布时间】:2013-08-13 12:03:02
【问题描述】:
我最近尝试在 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;
}
【问题讨论】:
-
将NULL作为
hsize传递是否有效?我希望EVP_Digest取消引用它以记录它写入digest的数据长度 -
@simonc:当您查看 openssl 源代码时,有一段代码他们像我一样使用它,这就是为什么我和作者一样使用它。不过谢谢,会检查的。
-
@simonc:是的,就像我写的一样=不幸的是它没有改变任何东西:(
-
@simonc:有趣的事情。我在带有选项的
valgrind下运行它:valgrind --tool=memcheck --leak-check=yes它没有给我任何错误,此外,它打印了一个很好的 md4 哈希!这是怎么回事?我的valgrind输出:pastie.org/private/fyezmezfnulubf95djq9w -
抱歉,我不确定。如果你运行的是 linux,你可以检查 glibc 和 openssl 之间的不兼容。您还可以尝试获取 openssl 代码,自己构建它,然后在调试器中单步执行代码以查看它失败的确切位置。
标签: c openssl digest message-digest