Generieren eines SHA-256-Hash über die Linux-Befehlszeile

233

Ich weiß, dass die Zeichenfolge "foobar" den SHA-256-Hash c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2mithilfe von http://hash.online-convert.com/sha256-generator generiert

Die Befehlszeilen-Shell:

hendry@x201 ~$ echo foobar | sha256sum
aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f  -

Erzeugt einen anderen Hash. Was vermisse ich?

hendry
quelle
4
sha256sum < foobar. Keine Notwendigkeit für Katze , Echo , Druck , ... Siehe auch Nutzlose Verwendung von Katze?
Koppor
7
@koppor < foobarist nicht dasselbe wie echo foobar |. Das Äquivalent für echo foobar |wäre, sha256sum <<< foobaraber das fügt foobar genau wie eine neue Zeile hinzu echo.
MVDS
openssl dgst -sha256 foobarfunktioniert für mich unter MacOS High Sierra, echo -n foobar | openssl dgst -sha256gab aber eine falsche Antwort.
glückverheißend99

Antworten:

361

echogibt normalerweise eine neue Zeile aus, die mit unterdrückt wird -n. Versuche dies:

echo -n foobar | sha256sum
mvds
quelle
76
HINWEIS: Unter OS X (BSD) ist esecho -n foobar | shasum -a 256
Olie
6
benutze einfach printf;)
dylnmc
11
Unter OSX kann es nützlich sein, einen Alias ​​zu erstellen:alias sha256sum='shasum --algorithm 256'
Jonathan Cross
1
Warum endet es mit * -
Philip Rego
2
@PhilipRego Es ist das Shasum der Eingabe auf stdin, daher wird anstelle des Dateinamens -gedruckt.
MVDS
100

Wenn Sie installiert haben openssl, können Sie verwenden:

echo -n "foobar" | openssl dgst -sha256

Für andere Algorithmen können Sie ersetzen -sha256mit -md4, -md5, -ripemd160, -sha, -sha1, -sha224, -sha384, -sha512oder -whirlpool.

Farahmand
quelle
Gibt es eine Möglichkeit, die Anzahl der Runden anzugeben, die Sie in sha512 möchten? Ich schaute und konnte es nicht finden und fragte mich, ob Sie es wissen würden?
f1lt3r
1
@AlistairMacDonald - Ich weiß nicht genau, wonach Sie suchen. AFAIK, SHA512 benötigt 80 Runden; Wenn Sie die Funktion manipulieren möchten, ist sie nicht mehr sha512. Übrigens können Sie Ihre Frage in crypto.stackexchange.com suchen / stellen .
Farahmand
3
Im Gegensatz zur akzeptierten Antwort funktioniert dies unter MacOS.
weefwefwqg3
45

Wenn der Befehl sha256sum nicht verfügbar ist ( z. B. unter Mac OS X 10.9 (Mavericks)), können Sie Folgendes verwenden:

echo -n "foobar" | shasum -a 256

Sucrenoir
quelle
1
Nett! Ich habe dies zu meiner .bash_profile-Funktion sha256 () {echo -n "$ *" | hinzugefügt shasum -a 256} und rufen Sie an wie: ~ $ sha256 foobar
rbento
Im Gegensatz zu der akzeptierten Antwort funktioniert dies für MacOS
weefwefwqg3
Oder meinst du Ubuntu 10.10 (Maverick Meerkat) ? (Nein, Maverick ). Es wurde 2010 veröffentlicht, während Mac OS X 10.9 einen Monat vor dieser Antwort veröffentlicht wurde.
Peter Mortensen
29

echo -nfunktioniert und wird aufgrund der massiven historischen Nutzung wahrscheinlich nie verschwinden. Gemäß den neuesten Versionen des POSIX-Standards werden jedoch neue konforme Anwendungen "zur Verwendung ermutigt printf".

Nicholas Knight
quelle
8

echoerzeugt ein nachfolgendes Zeilenumbruchzeichen, das ebenfalls gehasht wird. Versuchen:

/bin/echo -n foobar | sha256sum 
Nordischer Mainframe
quelle
7

Ich glaube, das echogibt einen nachgestellten Zeilenumbruch aus. Versuchen Sie -n, das Echo als Parameter zu verwenden, um die neue Zeile zu überspringen.

Thomas Owens
quelle