linux – MD5 のハッシュ値が Bash や PHP とは異なる

bash linux md5sum php security
この質問はすでにここに答えがあります
なぜ私のコマンドラインハッシュはオンラインのMD5ハッシュの結果と違うのですか? (4件の回答)
クローズド 4年前.

hello “という文字列のMD5和を(md5sumを使って)生成しようとしました。Linux の md5sum ツール、PHP の MD5() 関数、オンラインのテキストから md5sum への翻訳ツールなど、さまざまな方法を試してみました

echo "hello" | md5sum

and

echo "hello" > file && md5sum file

結果は b1946ac92492d2347c6235b4d2611184 です。しかし、PHP の md5() 関数やほとんどすべてのオンラインジェネレーターは 5D41402ABC4B2A76B9719D911017C592 を出力します

その理由は何でしょうか?

  61  Himanshu Shekhar  2016-02-21


ベストアンサー

デフォルトでは、echoには出力の最後に改行文字が含まれています。しかし、PHPや使用したオンラインサイトでは改行は含まれていません。改行文字を含まないようにするには、-nフラグを使用します

echo -n "hello" | md5sum

Output:

5d41402abc4b2a76b9719d911017c592  -

見てください。help echo


またはprintfを使用してください

printf "%s" "hello" | md5sum

81  Cyrus  2016-02-21


Cyrusの回答は、これを解決する方法についての正確なポイントを示しています – 説明すると、echoを使用すると、文字列の最後に改行を出力します。このオンライン出力を見ればわかるように、helloに改行を加えた場合、以前に取得していたMD5を正確に出力します。-n を使用すると改行が抑制され、期待した結果が得られます

enter image description here

Edit:

そこにバイトの16進数が表示されているhexdumpに出力するとよくわかります

$ echo "str_example" | hd
00000000  73 74 72 5f 65 78 61 6d  70 6c 65 0a              |str_example.|

文字列の最後にある0a\n)を参照してください

$ echo -n "str_example" | hd
00000000  73 74 72 5f 65 78 61 6d  70 6c 65                 |str_example|

-nではechoは最後に改行(\n)を入れません

今度は空の文字列で

$ echo  "" | hd
00000000  0a                                                |.|

ニューラインのキャラだけで

$ echo -n  "" | hd

空の文字列なので、hexdumpは出力しません

100  Jonno  2016-02-21


タイトルとURLをコピーしました