Gerando um hash SHA-256 a partir da linha de comandos do Linux

234

Eu sei que a string "foobar" gera o hash SHA-256 c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2usando http://hash.online-convert.com/sha256-generator

No entanto, o shell da linha de comando:

hendry@x201 ~$ echo foobar | sha256sum
aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f  -

Gera um hash diferente. o que estou perdendo?

Hendry
fonte
4
sha256sum < foobar. Não há necessidade de gato , eco , impressão ... Veja também Uso inútil de gato?
koppor
7
@koppor < foobarnão é o mesmo que echo foobar |. O equivalente a echo foobar |seria, sha256sum <<< foobarmas isso adiciona uma nova linha ao foobar da mesma forma echo.
Mvds
openssl dgst -sha256 foobarfunciona para mim no MacOS High Sierra, enquanto echo -n foobar | openssl dgst -sha256deu uma resposta incorreta.
auspicious99

Respostas:

362

echonormalmente gera uma nova linha, que é suprimida com -n. Tente o seguinte:

echo -n foobar | sha256sum
mvds
fonte
76
NOTA: no OS X (BSD), éecho -n foobar | shasum -a 256
Olie 16/10
6
apenas use printf;)
dylnmc 26/09/15
11
No OSX, pode ser útil criar um alias:alias sha256sum='shasum --algorithm 256'
Jonathan Cross
1
Por que terminam com * -
Philip Rego
2
@PhilipRego É o shasum da entrada no stdin, portanto, em vez do nome do arquivo -é impresso.
MVDs
100

Se você instalou openssl, você pode usar:

echo -n "foobar" | openssl dgst -sha256

Para outros algoritmos que você pode substituir -sha256com -md4, -md5, -ripemd160, -sha, -sha1, -sha224, -sha384, -sha512ou -whirlpool.

Farahmand
fonte
Existe uma maneira de especificar o número de rodadas que você deseja no sha512? Eu olhei e não consegui encontrá-lo e me perguntei se você saberia?
precisa saber é o seguinte
1
@AlistairMacDonald - Não sei exatamente o que você está procurando. AFAIK, SHA512 precisa de 80 rodadas; Se você deseja manipular a função, ela não será mais sha512. BTW, você pode pesquisar / fazer sua pergunta em crypto.stackexchange.com .
Farahmand
3
Diferentemente da resposta aceita, isso funciona para o MacOS.
precisa saber é o seguinte
45

Se o comando sha256sum não estiver disponível (no Mac OS X 10.9 (Mavericks) por exemplo), você poderá usar:

echo -n "foobar" | shasum -a 256

Sucrenoir
fonte
1
Agradável! Adicionei isso à minha função .bash_profile sha256 () {echo -n "$ *" | shasum -a 256} e chame como: ~ $ sha256 foobar
rbento 15/02
Ao contrário da resposta aceita, isso funciona para MacOS
weefwefwqg3
Ou você quer dizer Ubuntu 10.10 (Maverick Meerkat) ? (não, Maverick ). Foi lançado em 2010, enquanto o Mac OS X 10.9 foi lançado um mês antes desta resposta.
Peter Mortensen
29

echo -nfunciona e é pouco provável que desapareça devido ao uso histórico maciço, no entanto, por versões recentes do padrão POSIX , novos aplicativos em conformidade são "encorajados a usar printf".

Nicholas Knight
fonte
8

echoproduz um caractere de nova linha à direita que também é hash. Experimentar:

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

Eu acredito que echogera uma nova linha à direita. Tente usar -ncomo parâmetro para ecoar para pular a nova linha.

Thomas Owens
fonte