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?
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
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.
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