web-dev-qa-db-ja.com

cygwin sha512が端末に応じて異なるチェックサムを作成するのはなぜですか?

私はWindows7を使用しており、CygwinとmingベースのGitコマンドラインツールの両方を使用しています。

コマンドを発行すると:

c:\>echo -n hello | e:\cygwin\bin\sha512sum

windowsコマンドから、それは生成します

91fe211053c6377ddfd218a061f96de1ca304b10d966a4c3572d9af22bbe86dc471653d0f9b14f923762d0bf83a0abfe285b855e1ee06b0d4ab4a60a8d8801e3 *-

私はそれを間違っただと信じています。

ただし、コマンドを発行すると

$ echo -n hello | /e/cygwin/bin/sha512sum

gitコマンドラインから、それは生成します

9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043 *-

これが正しい16進チェックサムだと思います。まったく同じ入力がまったく同じバイナリ実行可能ファイルに送信されていると想定していましたが、これは私が見ている動作では正しくありません。 Windows CMDは、cygwin sha512バイナリに異なる入力を送信するある種の面白いエンコーディングを実行しますか?

[〜#〜] edit [〜#〜]標準のWindowsコマンドプロンプトから正しいチェックサムを取得することに関心がある人にとって、トリックはウィンドウエコーコマンドを使用しないことです(答えはこれをほのめかします) 。 cygwinのechoコマンドを使用すると、正しいチェックサムが生成されます。

例えば。、

e:\cygwin\bin\echo -n hello | e:\cygwin\bin\sha512sum
2
GojiraDeMonstah

デフォルトのwindowsechoコマンドは、-nで呼び出された場合でも、スペースと行末を追加します。これを試してください:echo -n hello > a.txtの後にdirを続けると、5バイトのファイルがないことがわかります。

3
David Schwartz

デフォルトのウィンドウエコーは「-n」を理解しません。したがって、2つのコマンドは同等ではありません。

e:\cygwin64\bin>echo -n "hello" |od -c
0000000   -   n       "   h   e   l   l   o   "      \r  \n
0000015

$ echo -n "hello" |od -c
0000000   h   e   l   l   o
0000005
3
matzeri