【问题标题】:C++ (win)OpenSSL MD5 CrashC++ (win)OpenSSL MD5 崩溃
【发布时间】:2012-01-10 23:35:28
【问题描述】:

我在实施 openssl(on windows) md5 时被困了一天。如此简单的事情似乎永远不会发生。它在运行时崩溃@ MD5_Update。有什么我遗漏的吗,如果有,有什么有用的提示可以改进我的代码,这样我就再也不会这样做了?我关注了这些文件:http://www.openssl.org/docs/crypto/md5.html 谢谢。我真的很感激。 :-)

#include <iostream>
#include <iomanip>
#include <openssl/md5.h>
using namespace std;

int main()
{
    unsigned char data[] = {0xd1, 0x31, 0xdd, 0x02, 0xc5, 0xe6, 0xee, 0xc4, 0x69, 0x3d, 0x9a, 0x06, 0x98, 0xaf, 0xf9, 0x5c};
    unsigned char hash[16];
    MD5_CTX *c;
    MD5_Update(c,data,16);
    MD5_Final(hash, c);

    for(int i=0;i<16;i++)
    cout << setfill('0') << setw(2) << hex << (int)hash[i] << " ";

    int a;
    cin >> a;
    return 0;
}

【问题讨论】:

  • 你不必在MD5_Update之前使用MD5_Init(c);吗?
  • 是的。你做。感谢您的快速回复! :)

标签: c++ encryption openssl md5


【解决方案1】:

您永远不会创建,也不会分配空间来保存 MD5 上下文。

MD5_CTX *c;
MD5_Update(c,data,16);

在为变量赋值之前,您不能使用它!在您的第一行之后,c 有一些任意的垃圾值,然后您将其传递给 MD5_Update!

试试:

MD5_CTX c;
MD5_Init(&c);
MD5_Update(&c, data, 16);

【讨论】:

  • 非常感谢。有用!我忘了加:MD5_Final(hash, &c);
  • 散列一些已知数据并检查输出。 “0123456789abcdef”(16 个字符,ASCII,小写)的 MD5 哈希为“4032af8d61035123906e58e067140cc5”。
  • 无符号字符数据[] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66};我得到:0x43 0xb8 0x4a 0x8e 0x08 0x1a 0x16 0x62 0x05 0x50 0xbf 0x13 0xe9 0xd3 0xe3 0xb5
  • 呸,我以为你只指字母。现在可以使用: unsigned char data[] = {0x30, 0x031, 0x32, 0x33, 0x034, 0x035, 0x036, 0x037, 0x038, 0x039, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66};对不起,我很痛苦!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-11
相关资源
最近更新 更多