Mengapa cygwin sha512 membuat checksum berbeda tergantung pada terminal?

2

Saya menggunakan Windows 7 dan memiliki Cygwin dan alat baris perintah Git berbasis ming.

Saat saya mengeluarkan perintah:

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

dari cmd Windows, itu menghasilkan

91fe211053c6377ddfd218a061f96de1ca304b10d966a4c3572d9af22bbe86dc471653d0f9b14f923762d0bf83a0abfe285b855e1ee06b0d4ab4a60a8d8801e3 *-

yang saya yakini tidak benar .

Namun, saat saya mengeluarkan perintah

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

dari baris perintah git, ia menghasilkan

9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043 *-

yang saya percaya adalah hex checksum yang benar. Saya mengasumsikan input yang sama persis sedang dikirim ke executable biner yang sama persis, tetapi itu tidak benar dengan perilaku yang saya lihat. Apakah Windows CMD melakukan semacam pengkodean lucu yang mengirimkan input berbeda ke biner cygwin sha512?

EDIT Bagi siapa pun yang tertarik untuk mendapatkan checksum yang tepat dari prompt Windows cmd standar, triknya adalah tidak menggunakan perintah window echo (jawabannya menyinggung ini). Menggunakan perintah echo cygwin menghasilkan checksum yang benar.

Misalnya,

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

Jawaban:

3

echoPerintah windows default menambahkan spasi dan terminasi baris, bahkan jika dipanggil dengan -n. Coba ini: echo -n hello > a.txtdiikuti oleh dir, dan Anda akan melihat Anda tidak memiliki file 5 byte.

David Schwartz
sumber
3

Gema windows default tidak mengerti "-n". Jadi kedua perintah itu tidak setara.

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
matzeri
sumber