linux – MD5 のハッシュ値が Bash や PHP とは異なる
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
を使用すると改行が抑制され、期待した結果が得られます
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