it-swarm.com.de

Der MD5-Hashwert unterscheidet sich von Bash und PHP

Ich habe versucht, die MD5 Summe (mit md5sum) eines Strings zu generieren, "hallo". Ich habe verschiedene Methoden als md5sum-Tool unter Linux ausprobiert, die MD5 () -Funktion von PHP sowie verschiedene Online-Texte für md5sum-Übersetzer.

echo "hello" | md5sum

und

echo "hello" > file && md5sum file

Gab das Ergebnis b1946ac92492d2347c6235b4d2611184. Die md5 () -Funktion von PHP und fast alle Online-Generatoren gaben jedoch den 5D41402ABC4B2A76B9719D911017C592 aus.

Was ist der Grund?

60

Standardmäßig enthält echo am Ende der Ausgabe ein Zeilenumbruchzeichen. PHP und die von Ihnen verwendeten Online-Sites enthalten jedoch nicht den Zeilenumbruch. Verwenden Sie zum Unterdrücken des Zeilenumbruchs das Flag -n:

echo -n "hello" | md5sum

Ausgabe:

 5d41402abc4b2a76b9719d911017c592 - 

Siehe: help echo


oder mit printf:

printf "%s" "hello" | md5sum
79
Cyrus

Die Antwort von @ Cyrus ist genau richtig, um das Problem zu lösen - um zu erklären, dass bei Verwendung von echo am Ende der Zeichenfolge eine neue Zeile ausgegeben wird. Wie Sie in dieser Online-Ausgabe sehen können, gibt hello mit einem Zeilenumbruch genau das MD5 aus, das Sie zuvor erhalten haben. Durch die Verwendung von -n wird der Zeilenumbruch unterdrückt und Sie erhalten dann das erwartete Ergebnis.

 enter image description here

Bearbeiten :

Sie können es deutlich sehen, wenn Sie es in hexdump ausgeben, das die Hexadezimalzahl der Bytes dort anzeigt.

$ echo "str_example" | hd
00000000  73 74 72 5f 65 78 61 6d  70 6c 65 0a              |str_example.|

Siehe den 0a (\n) am Ende der Zeichenfolge

$ echo -n "str_example" | hd
00000000  73 74 72 5f 65 78 61 6d  70 6c 65                 |str_example|

Mit -n setzt echo am Ende keine neue Zeile (\n)

Jetzt mit einer leeren Zeichenfolge

$ echo  "" | hd
00000000  0a                                                |.|

Nur das New Line-Zeichen

$ echo -n  "" | hd

Leere Zeichenfolge, daher zeigt hexdump keine Ausgabe an

100
Jonno