Generazione di un hash SHA-256 dalla riga di comando di Linux


234

So che la stringa "foobar" genera l'hash SHA-256 c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2usando http://hash.online-convert.com/sha256-generator

Tuttavia la shell della riga di comando:

hendry@x201 ~$ echo foobar | sha256sum
aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f  -

Genera un hash diverso. Cosa mi sto perdendo?


4
sha256sum < foobar. Non c'è bisogno di cat , echo , printf , ... Vedi anche Uso inutile di cat?
Koppor,

7
@koppor < foobarnon è lo stesso di echo foobar |. L'equivalente per echo foobar |sarebbe sha256sum <<< foobarma che aggiunge una nuova riga al foobar proprio come echo.
mvds

openssl dgst -sha256 foobarfunziona per me su MacOS High Sierra, mentre ha echo -n foobar | openssl dgst -sha256dato una risposta errata.
auspicious99

Risposte:


362

echogenererà normalmente una nuova riga, che viene soppressa con -n. Prova questo:

echo -n foobar | sha256sum

76
NOTA: su OS X (BSD), èecho -n foobar | shasum -a 256
Olie,

6
basta usare printf;)
dylnmc il

11
Su OSX, potrebbe essere utile creare un alias:alias sha256sum='shasum --algorithm 256'
Jonathan Cross

1
Perché finisce con * -
Philip Rego,

2
@PhilipRego È lo shasum dell'input su stdin, quindi al posto del nome del file -viene stampato.
mvds

100

Se hai installato openssl, puoi usare:

echo -n "foobar" | openssl dgst -sha256

Per gli altri algoritmi è possibile sostituire -sha256con -md4, -md5, -ripemd160, -sha, -sha1, -sha224, -sha384, -sha512o -whirlpool.


C'è un modo per specificare il numero di round che vuoi in sha512? Ho guardato e non sono riuscito a trovarlo e mi chiedevo se lo sapevi?
f1lt3r,

1
@AlistairMacDonald - Non so esattamente cosa stai cercando. AFAIK, SHA512 ha bisogno di 80 colpi; Se vuoi manipolare la funzione, non sarà più sha512. A proposito, puoi cercare / porre la tua domanda in crypto.stackexchange.com .
Farahmand,

3
A differenza della risposta accettata, questo funziona per MacOS.
weefwefwqg3,

45

Se il comando sha256sum non è disponibile (ad esempio su Mac OS X v10.9 (Mavericks)), è possibile utilizzare:

echo -n "foobar" | shasum -a 256


1
Bello! Ho aggiunto questo alla mia funzione .bash_profile sha256 () {echo -n "$ *" | shasum -a 256} e chiama like: ~ $ sha256 foobar
rbento

A differenza della risposta accettata, questo funziona per MacOS
weefwefwqg3,

O intendi Ubuntu 10.10 (Maverick Meerkat) ? (no 's', Maverick ). È stato rilasciato nel 2010 mentre Mac OS X v10.9 è stato rilasciato un mese prima di questa risposta.
Peter Mortensen,

29

echo -nfunziona ed è improbabile che scompaia mai a causa del massiccio utilizzo storico, tuttavia per le recenti versioni dello standard POSIX , le nuove applicazioni conformi sono "incoraggiate ad usare printf".


8

echoproduce un carattere newline finale anch'esso con hash. Provare:

/bin/echo -n foobar | sha256sum 

7

Credo che echoproduca una nuova riga finale. Prova a usare -ncome parametro l'eco per saltare la nuova riga.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.