2012-01-10 101 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