Warum erstellt cygwin sha512 je nach Terminal unterschiedliche Prüfsummen?


2

Ich benutze Windows 7 und habe sowohl Cygwin als auch das Ming-basierte Git-Kommandozeilen-Tool.

Wenn ich den Befehl gebe:

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

Aus dem Windows-Cmd generiert es

91fe211053c6377ddfd218a061f96de1ca304b10d966a4c3572d9af22bbe86dc471653d0f9b14f923762d0bf83a0abfe285b855e1ee06b0d4ab4a60a8d8801e3 *-

was ich für falsch halte .

Allerdings, wenn ich den Befehl erteile

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

Über die Git-Befehlszeile wird generiert

9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043 *-

was ich glaube ist die richtige hex prüfsumme. Ich bin davon ausgegangen, dass genau dieselbe Eingabe an genau dieselbe ausführbare Binärdatei gesendet wird, aber das stimmt nicht mit dem Verhalten überein, das ich sehe. Führt Windows CMD eine lustige Codierung durch, die unterschiedliche Eingaben an die Cygwin Sha512-Binärdatei sendet?

BEARBEITEN Für alle, die daran interessiert sind, die richtige Prüfsumme von einer standardmäßigen Windows-Eingabeaufforderung zu erhalten, besteht der Trick nicht darin, den Befehl window echo zu verwenden (die Antwort spielt darauf an). Mit dem Befehl echo von cygwin wird die richtige Prüfsumme generiert.

Z.B,

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

Antworten:


3

Der Windows-Standardbefehl echofügt Leerzeichen und Zeilenabschluss hinzu, auch wenn er mit aufgerufen wird -n. Versuchen Sie Folgendes : echo -n hello > a.txtgefolgt von dir, und Sie werden feststellen, dass Sie keine 5-Byte-Datei haben.


3

Das Standard-Windows-Echo versteht "-n" nicht. Die beiden Befehle sind also nicht gleichbedeutend.

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.