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

配列の「unsigned char」型に惑わされないでください。ここで意味するのは、配列の各値が 8 ビットの符号なし整数になるということです。特に、配列に書き込まれるデータが人間が読める ASCII 文字であることを意味するものではありません。

配列の内容を人間が読める 16 進数形式で表示したい場合は、(cout コマンドの代わりに) 次のようにします。

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