【问题标题】:MD4 openssl core dumpedMD4 openssl 核心转储
【发布时间】: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


【解决方案1】:

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

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

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

另外,你应该#include &lt;openssl/evp.h&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-12
    • 2017-01-29
    • 2017-08-13
    • 2021-02-16
    • 2013-03-03
    • 1970-01-01
    相关资源
    最近更新 更多