2013-02-12 95 views
1

我正在研究C++類,並且我們正在學習MD5哈希函數。我遇到這個問題,但是,如果我這樣做:MD5哈希函數輸出垃圾

string input = "testInput"; 
unsigned char *toHash = new unsigned char[input.size()+1]; 
strcpy((char*)toHash, input.c_str()); 

unsigned char output[MD5_DIGEST_LENGTH]; 

MD5(toHash, input.size(), output); 

cout << hex << output << endl; 

但我總是得到一些奇怪的亂碼,而不是我要找的,類似的數字/字母的長字符串。這是怎麼回事?

〜 低級別C++很困惑

+1

散列函數生成包含所述散列二進制串;您需要將其轉換爲十六進制或其他您想要使用的表示。 – 2013-02-12 03:19:38

+0

好吧,但它生成的二進制字符串到無符號字符數組的權利?我不明白爲什麼這些位不會被解釋爲無符號字符的時候,這會讓你通過cout輸出它們...... – user1288167 2013-02-12 03:22:46

+3

「垃圾」也被稱爲md5摘要。 :-) – asveikau 2013-02-12 03:24:56

回答

0

不要被「無符號char」類型的數組,所有這一切意味着這裏是陣列中的每個值將是一個8上當位無符號整數。特別是它不是意味着寫入數組的數據將是人類可讀的ASCII字符。

如果你想看到在人類可讀的十六進制形式的數組的內容,則可以做到這一點(而不是COUT命令):

for (int i=0; i< MD5_DIGEST_LENGTH; i++) printf("%02x ", output[i]); 
printf("\n");