Wie bekomme ich den MD5-Hash eines Strings direkt in das Terminal?

189

Wie bekomme ich den MD5- Hash eines Strings direkt vom Terminal?

Zum Beispiel möchte ich, dass der String abcdefggehasht wird. Derzeit akzeptiert der Befehl md5sum nur einen Dateinamen als Eingabe. Ich möchte einfach die folgende Zeile eingeben und alles erledigen.

md5sum abcdefg
output: ac54bcf346e578feb46888b3ecd2344f

Wie kann ich das erreichen?

Hamed Momeni
quelle
2
md5 -s abcdefg
raitisd

Antworten:

252

Sie können auch so etwas sagen:

~$ echo -n Welcome | md5sum
83218ac34c1834c26781fe4bde918ee4  -

Es macht im Grunde das Gleiche wie von @enzotib beschrieben, ist aber vielleicht ein bisschen einfacher.

jfmessier
quelle
2
Sie möchten auch das Beispielergebnis aktualisieren, da 7803ffca ... das Ergebnis mit dem hinzugefügten Zeilenumbruch ist. Das korrekte Ergebnis für den obigen Befehl lautet83218ac34c1834c26781fe4bde918ee4 -
Xanthir
19
Warum gibt es Leerzeichen und einen Bindestrich am Ende?
Keune
1
Bitte korrigieren Sie mich, wenn ich falsch liege, aber ich denke, das liegt daran, dass die MD5-Summe auf einen Datenstrom angewendet wurde, anstatt einen Dateiinhalt zu lesen, dem ein Name zugeordnet ist.
jfmessier
11
Beachten Sie, dass das -nobligatorisch ist. Ohne das wird Ihr Hash völlig falsch sein, da es das Newline-Zeichen enthält.
Pithikos
1
Wie könnte ich -am Ende ignorieren . @jfmessier
alper
61

Sehr einfach, es akzeptiert Standard, also

md5sum <<<"my string"

So vermeiden Sie, dass die Shell nachgestellte Zeilenumbrüche hinzufügt:

printf '%s' "my string" | md5sum
Enzotib
quelle
Geben Sie @messier und @enzotib eine Stimme; beide fallen in meine geschätzte Kategorie "elegante Einfachheit". Ich würde die <<<"Pipe gerne in einem Skript verwenden. echo stringgewinnt für die Kommandozeile. Gut gemacht.
Tom
3
+1 für die printfkorrekte Verwendung . Wenn Sie die Summe ohne haben möchten -, setzen Sie | cut -d ' ' -f 1. Anwendungsbeispiel:sum=$(printf '%s' 'some string' | md5sum | cut -d ' ' -f 1)
Lekensteyn
1
Es ist seltsam, aber der <<<Operator und die printfFunktion geben völlig unterschiedliche Ergebnisse für MD5-Hash! das ergebnis von printf ist aber richtig!
Hamed Momeni
es scheint, als würde der <<<Operator eine neue Zeile an die md5sum senden!
Hamed Momeni
1
Ja, wie gesagt, zwischen dem ersten und dem zweiten Beispiel
Enzotib
27
$ echo -n 123456 | md5sum | awk '{print $1}'
e10adc3949ba59abbe56e057f20f883e

Sie können ein Shell-Skript erstellen.

Der Skriptname lautet beispielsweise md5.sh:

#!/bin/bash

echo   -n   $1 | md5sum | awk '{print $1}'

Erlaubnis ausführen:

 chmod +x md5.sh

Dann:

$ md5.sh 123456
e10adc3949ba59abbe56e057f20f883e

Wenn Ihr System MacOS ist. Sie müssen dieses Skript ändern:

$ echo -n 123456 | md5 | awk '{print $1}' 
e10adc3949ba59abbe56e057f20f883e
ty4z2008
quelle
1
Das ist einfach zu lang.
Gucho Ca
1
Alternative zu awk:cut -d ' ' -f 1
Blauhirn
Ich habe eine Funktion md5() { echo -n $1 | md5sum | awk '{print $1}'; }in .bashrc erstellt und kann sie dann $ md5 testin der Befehlszeile verwenden. Danke für die Antwort
Ruben Benjamin
Kürzere awkAnweisung:'$0=$1'
Alex Stragies
@ AlexStragies yep
ty4z2008
10

Wenn Sie md5sum ohne Argumente ausführen, wird die Eingabe vom Terminal gelesen. Geben oder fügen Sie ein, was Sie möchten. Wenn Sie fertig sind, drücken Sie ctrl-d, um die Eingabe zu beenden.

Psusi
quelle
1
ja, du hast auch recht sondern ctrl+dmuss zweimal gedrückt werden , damit es funktioniert.
Hamed Momeni
@James, wenn es nicht einem Zeilenumbruch folgt, ja. Wenn Sie es nach dem Drücken der Eingabetaste drücken, wird es nur einmal benötigt. Wenn es nicht auf eine neue Zeile folgt, werden alle bisher in die Zeile eingegebenen Zeichen sofort verarbeitet, anstatt auf eine neue Zeile zu warten.
Psusi
10
openssl md5 filename
openssl sha1 filename

Für String Pipe den Inhalt mit Echo

echo -n 123456 | openssl md5
Gast
quelle
4

Mein kurzer Blick auf das --helpFor md5sumzeigt, dass der Befehl:

md5sum -

wird dann eine Aufforderung zur einfachen Eingabe geben. Wenn Sie etwas Text eingeben und dann Enterund dann Ctrl+ verwenden D, um das Ende der Datei zu kennzeichnen md5sum, wird das MD5 des eingegebenen EnterRohtexts ausgespuckt (einschließlich CR, IIRC).

Weniger zu tippen und keine Rohrleitungen! Und vermeiden Sie, dass Ihr Klartext-Passwort im Shell-Verlauf aufgezeichnet wird! Woo!

Wenn Sie diesen abschließenden CR nicht möchten (was normalerweise der Fall ist, wenn Sie ein Kennwort hacken möchten), drücken Sie nicht Entervor Ctrl+ D, sondern geben Sie zweimal Ctrl+ Dein.

Wille
quelle
2

In meinen Skripten habe ich festgestellt, dass es zwei Dinge gibt, die Sie über dieses Problem wissen sollten.

  • Es spielt keine Rolle, ob Sie dies tun echo "$myvariable"oder nicht, echo -n "$myvariable" aber Sie sollten immer die doubleqoutes für Zeichenfolgen verwenden und immer die gleiche Methode verwenden. wenn nicht, passen die Dinge nicht zusammen.
  • In der Ausgabe erhalten Sie immer ein Leerzeichen und einen Bindestrich, wie im Beispiel gezeigt:

    $ echo -n Welcome | md5sum
    7803ffcaea43bb81a439fde13b29bc35  -
    

Um das loszuwerden und nur mit dem Code zu bleiben 7803ffcaea43bb81a439fde13b29bc35, mache:echo "$myvariable" | md5sum | cut -d" " -f1

Bodo Hugo Barwich
quelle
Vergessen Sie den -nParameter hier nicht, um zu vermeiden, dass die nachgestellte Newline ausgegeben wird, was zu einem falschen md5 führen würde:echo -n $myvariable | md5sum | cut -d" " -f1
derFunk
1

Es gibt viele Beispiele dafür, aber einige davon sind nicht gleichwertig, da einige explizit oder implizit den Zeilenumbruch enthalten und andere nicht.

Ich möchte klar spezifizieren, welche der populären Methoden die Newline beinhaltet und welche nicht.

Hier einige Beispiele zur Berechnung des md5- Hash OHNE nachfolgende Newline (CORRECT):

Verwenden einer Datei mit Text:

$ echo -n "test" > test.txt
$ wc test.txt
0 1 4 test.txt
$ md5sum test.txt
098f6bcd4621d373cade4e832627b4f6  test.txt

Hinweis: -n in echobedeutet: "Keine abschließenden Zeilenumbrüche ausgeben".

Verwendung echomit -nInline:

$ echo -n "test" | md5sum
098f6bcd4621d373cade4e832627b4f6  -

Verwenden von printf:

$ printf "%s" "test" | md5sum
098f6bcd4621d373cade4e832627b4f6  -

Verwenden Sie nur den md5sumBefehl:

(Lassen Sie uns schreiben md5sum, drücken Sie Enterdann schreiben Zeichenfolge testund drücken Sie dann die doppelte Kombination Ctrl+ d)

$ md5sum
test098f6bcd4621d373cade4e832627b4f6  -

Mit md5sum -Befehl:

(Lassen Sie uns schreiben md5sum -, drücken Sie Enterdann schreiben Zeichenfolge testund drücken Sie dann die doppelte Kombination Ctrl+ d)

$ md5sum -
test098f6bcd4621d373cade4e832627b4f6  -

Hier sind einige Beispiele für die Berechnung des MD5- Hash mit nachgestelltem Zeilenumbruch (SO NOT CORRECT):

Verwenden einer Datei mit Text:

$ echo "test" > test_n.txt
$ wc test_n.txt
1 1 5 test_n.txt
$ md5sum test_n.txt
d8e8fca2dc0f896fd7cb4cb0031ba249  test_n.txt

Mit echoOHNE -ninline:

echo "test" | md5sum
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Verwenden Sie hier Zeichenfolgen :

$ md5sum <<< "test"
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Verwenden Sie nur den md5sumBefehl, aber mit der EnterTaste, nachdem Sie den Text geschrieben haben:

(Lassen Sie uns schreiben md5sum, drücken Sie Enterdann schreiben Zeichenfolge testund drücken Sie dann wieder Enterund einmal Kombination Ctrl+ d)

$ md5sum
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -

Verwenden des md5sum -Befehls aber mit der EnterTaste nach dem Schreiben des Textes:

(Lassen Sie uns schreiben md5sum -, drücken Sie Enterdann schreiben Zeichenfolge testund drücken Sie dann wieder Enterund einmal Kombination Ctrl+ d)

$ md5sum -
test
d8e8fca2dc0f896fd7cb4cb0031ba249  -
simhumileco
quelle