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?


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

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.


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


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


8

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

/bin/echo -n foobar | sha256sum 

7

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.