Diese Frage hat hier bereits eine Antwort:
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-Text-to-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 die Ausgabe 5D41402ABC4B2A76B9719D911017C592
.
Was ist der Grund?
Antworten:
Standardmäßig wird
echo
am Ende der Ausgabe ein Zeilenumbruchzeichen eingefügt. PHP und die von Ihnen verwendeten Online-Sites enthalten jedoch keine Zeilenumbrüche. Verwenden Sie das-n
Flag, um das Zeilenumbruchzeichen zu unterdrücken :Ausgabe:
Sehen:
help echo
oder mit printf:
quelle
echo -n
könnte widerhallen,-n
wenn ihr Linux eine abgespeckte Busybox verwendet.@ Cyrus Antwort ist genau der
echo
richtige Punkt, um dieses Problem zu lösen - um zu erklären, dass bei Verwendung eine neue Zeile am Ende der Zeichenfolge ausgegeben wird. Wie Sie auf dieser Online-Ausgabe sehen können, gibthello
eine Newline genau den MD5 aus, den Sie zuvor erhalten haben. Mit wird-n
der Zeilenumbruch unterdrückt und Sie erhalten dann das erwartete Ergebnis.Bearbeiten :
Sie können es deutlich sehen, wenn Sie es ausgeben
hexdump
, das die Hexadezimalzahl der Bytes dort zeigt.Siehe das
0a
(\n
) am Ende der ZeichenfolgeMit
-n
echo wird\n
am Ende keine neue Zeile ( ) eingefügtJetzt mit einer leeren Zeichenfolge
Nur das New Line-Zeichen
Leere Zeichenfolge,
hexdump
zeigt also keine Ausgabequelle
echo hello
bzw.echo -n hello
zuhexdump -C
;)echo -n
, da es nicht dem Standard entspricht und nicht einheitlichecho
unterstützt wird (siehe Single Unix Spec für und einen detaillierten Katalog von Inkompatibilitäten von Sven Mascheck ). Wenn Sie möchten, dass es konsistent funktioniert, verwenden Sieprintf
stattdessen; Die Verwendung ist etwas komplexer (Sie müssen zusätzlich zu den zu druckenden Daten eine Formatzeichenfolge angeben), aber IMO lohnt sich, um Probleme zu vermeiden. In diesem Fallprintf "%s" "hello"
wird der Trick tun.