私はC++でMD5ハッシュ関数を実装しようとしており、いくつかの16進値であるいくつかのウェブサイトからオンラインで見つかった入力値に対して正しい結果を得ようとしています。この時点まで、私はそれが正しく機能するようになった。しかし、私はASCII文字列で同じことをしようとすると、私は運がないと本当に私が他に何をすべきかを理解することができません。MD5ハッシング中の文字列の埋め込み
私がやった最初のことは、ASCII文字列を16進数に変換し、最後に0x00を1つ追加した後に0x00の束を、最後の8バイトに16進数の付加されていないメッセージの長さを付加することです。
たとえば、「test123」は16進数で「0x74,0x65,0x73,0x74,0x31,0x32,0x33」と表され、バイトの長さは7です。次に、ハッシュ関数への入力として使用されるバイト配列私は、それは以下の通りである
const uint8_t test123Array[64] = {
0x74, 0x65, 0x73, 0x74, 0x31, 0x32, 0x33, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07
};
を得る限りであると私はハッシュ関数を適用したとき、私が得る結果は、私がオンラインハッシュジェネレータのウェブサイトを介して取得結果に対し、
e7 54 fa ea 1e d7 69 ba 85 59 62 bf 16 e9 98 48
あるものですlike
cc 03 e7 47 a6 af bb cb f8 be 76 68 ac fe be e5
最後に '0x07'とは何ですか?これは、パディングの仕様の一部ではありません。 –
既存の**パブリックドメイン**のMD5実装が大量に存在する場合、なぜホイールを再構築するのですか? ([example](http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5)) – rustyx
私はリンクhttps://www.ietf.orgで仕様を見つけました/rfc/rfc1321.txtとパッディングについては、どこが間違っているのか分かりません。 –