1

我正在研究一个 C++ 类,我们正在学习 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++ 搞糊涂了

4

1 回答 1

0

不要被数组的“无符号字符”类型所迷惑,这意味着数组中的每个值都是一个 8 位无符号整数。特别是它并不意味着写入数组的数据将是人类可读的 ASCII 字符。

如果你想以人类可读的十六进制形式查看数组的内容,你可以这样做(而不是 cout 命令):

for (int i=0; i< MD5_DIGEST_LENGTH; i++) printf("%02x ", output[i]);
printf("\n");
于 2013-02-12T04:15:33.077 回答