2012-01-10 102 views
1

我一直坚持一天实施openssl(在Windows)md5。这样一件简单的事情似乎就像是永远的。运行时,它会崩溃@ MD5_Update。是否有我缺少的东西,如果我有,提高我的代码的任何有用的提示,所以我再也不会这样做了?我遵循这些文件:http://www.openssl.org/docs/crypto/md5.html谢谢。我真的很感激。 :-)C++(win)OpenSSL MD5崩溃

#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; 
} 
+0

你没有使用'MD5_Init(C);'MD5_Update'之前'? – Zeta 2012-01-10 23:38:10

+0

是的。你做。感谢您的迅速反应! :) – user954753 2012-01-10 23:53:21

回答

2

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

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

在给它赋值之前,你不能使用变量!在你的第一行后,c有一些任意的垃圾值,然后你通过MD5_Update

尝试:

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

非常感谢。有用!我忘了添加:MD5_Final(hash,&c); – user954753 2012-01-10 23:52:08

+0

哈希一些已知的数据并检查输出。“abcdef”的MD5哈希(16个字符,ASCII,小写)是“4032af8d61035123906e58e067140cc5”。 – 2012-01-10 23:53:40

+0

unsigned char data [] = {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 – user954753 2012-01-11 00:04:54