Generando un hash SHA-256 desde la línea de comando de Linux

234

Sé que la cadena "foobar" genera el hash SHA-256 c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2usando http://hash.online-convert.com/sha256-generator

Sin embargo, la línea de comando shell:

hendry@x201 ~$ echo foobar | sha256sum
aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f  -

Genera un hash diferente. ¿Qué me estoy perdiendo?

hendry
fuente
44
sha256sum < foobar. No necesita cat , echo , printf , ... Consulte también ¿ Uso inútil de cat?
koppor
77
@koppor < foobarno es lo mismo que echo foobar |. El equivalente para echo foobar |sería, sha256sum <<< foobarpero eso agrega una nueva línea a foobar al igual que echo.
mvds
openssl dgst -sha256 foobarfunciona para mí en MacOS High Sierra, mientras que echo -n foobar | openssl dgst -sha256dio una respuesta incorrecta.
auspicioso99

Respuestas:

362

echonormalmente generará una nueva línea, que se suprime con -n. Prueba esto:

echo -n foobar | sha256sum
mvds
fuente
76
NOTA: en OS X (BSD), esecho -n foobar | shasum -a 256
Olie
66
just use printf;)
dylnmc
11
En OSX, puede ser útil crear un alias:alias sha256sum='shasum --algorithm 256'
Jonathan Cross
1
¿Por qué termina con * -
Philip Rego
2
@PhilipRego Es el shasum de entrada en stdin, por lo tanto, en lugar del nombre de archivo -se imprime.
mvds
100

Si lo ha instalado openssl, puede usar:

echo -n "foobar" | openssl dgst -sha256

Para otros algoritmos se puede reemplazar -sha256con -md4, -md5, -ripemd160, -sha, -sha1, -sha224, -sha384, -sha512o -whirlpool.

Farahmand
fuente
¿Hay alguna manera de especificar el número de rondas que desea en sha512? Miré y no pude encontrarlo y me pregunté si lo sabrías?
f1lt3r
1
@AlistairMacDonald - No sé exactamente lo que estás buscando. AFAIK, SHA512 necesita 80 rondas; Si desea manipular la función, ya no será sha512. Por cierto, puede buscar / hacer su pregunta en crypto.stackexchange.com .
Farahmand
3
A diferencia de la respuesta aceptada, esto funciona para MacOS.
weefwefwqg3
45

Si el comando sha256sum no está disponible (en Mac OS X v10.9 (Mavericks) por ejemplo), puede usar:

echo -n "foobar" | shasum -a 256

Sucrenoir
fuente
1
¡Agradable! He agregado esto a mi función .bash_profile sha256 () {echo -n "$ *" | shasum -a 256} y llame como: ~ $ sha256 foobar
rbento
A diferencia de la respuesta aceptada, esto funciona para MacOS
weefwefwqg3
¿O te refieres a Ubuntu 10.10 (Maverick Meerkat) ? (no 's', Maverick ). Fue lanzado en 2010, mientras que Mac OS X v10.9 fue lanzado un mes antes de esta respuesta.
Peter Mortensen
29

echo -nfunciona y es poco probable que desaparezca debido al uso histórico masivo, sin embargo, según las versiones recientes del estándar POSIX , se alienta a las nuevas aplicaciones conformes a usar printf.

Nicholas Knight
fuente
8

echoproduce un carácter de nueva línea al final que también está en hash. Tratar:

/bin/echo -n foobar | sha256sum 
Mainframe nórdico
fuente
7

Creo que eso echogenera una nueva línea final. Intente usar -ncomo parámetro para hacer eco para omitir la nueva línea.

Thomas Owens
fuente