GNU/Linux >> Linux の 問題 >  >> Linux

MD5 ハッシュ値は Bash や PHP とは異なります

@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 出力がありません


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

echo -n "hello" | md5sum

出力:

5d41402abc4b2a76b9719d911017c592  -

参照:help echo

または printf:

printf "%s" "hello" | md5sum

Linux
  1. Bashスクリプトでクリップボードとの間でパイプする

  2. 前回の実行時の値を保持する Bash スクリプトの変数

  3. stdout と stderr をデフォルト値に戻す

  1. $(stuff)と `stuff`の違いは何ですか?

  2. Bash For Loopsの「do」キーワードの目的は?

  3. フォルダから最も古いファイルを削除するためのBashスクリプト?

  1. 一致する行と一致する行からN番目の行を印刷しますか?

  2. 囲み対変数の値をBashの引用符で囲んでいないのですか?

  3. Bash +セカンダリスクリプトとメインスクリプトの両方を終了する方法は?