2013-02-12 87 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");