"hello"という文字列の MD5 和(md5sumを使用)を生成しようとしました。私はLinuxのmd5sumツール、PHPのMD5()関数、そしてmd5sum翻訳者へのさまざまなオンラインテキストとして、さまざまな方法を試しました。
echo "hello" | md5sum
そして
echo "hello" > file && md5sum file
結果をb1946ac92492d2347c6235b4d2611184
にします。しかし、PHPのmd5()関数とほとんどすべてのオンラインジェネレータが5D41402ABC4B2A76B9719D911017C592
という出力をしていました。
理由は何ですか?
デフォルトでは、echo
は出力の最後に改行文字を含みます。ただし、PHPおよび使用したオンラインサイトには改行は含まれません。改行文字を表示しないようにするには、-n
フラグを使用します。
echo -n "hello" | md5sum
出力:
5d41402abc4b2a76b9719d911017c592 -
参照してください:help echo
またはprintfを使うと
printf "%s" "hello" | md5sum
@ Cyrusの答えは、これをどのように解決するかという点にきちんと合っています - 説明として、echo
を使うとき、それは文字列の最後に改行を出力します。このオンライン出力でわかるように、改行付きのhello
は以前に取得したMD5を正確に出力します。 -n
を使うことは改行を抑制し、そしてあなたにあなたが期待した結果を与えるでしょう。
編集:
hexdump
に出力すれば、はっきりとわかります。そこにはバイトの16進数が表示されます。
$ 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
は出力を表示しません