Generowanie skrótu SHA-256 z wiersza poleceń systemu Linux

234

Wiem, że ciąg „foobar” generuje skrót SHA-256 c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2za pomocą http://hash.online-convert.com/sha256-generator

Jednak powłoka wiersza poleceń:

hendry@x201 ~$ echo foobar | sha256sum
aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f  -

Generuje inny skrót. czego mi brakuje?

hendry
źródło
4
sha256sum < foobar. Nie potrzebujesz kota , echa , printf , ... Zobacz także Bezużyteczne korzystanie z kota?
koppor
7
@koppor < foobarto nie to samo co echo foobar |. Odpowiednikiem echo foobar |byłoby, sha256sum <<< foobarale to dodaje nowy wiersz do foobar, podobnie jak echo.
mvds
openssl dgst -sha256 foobardziała dla mnie na MacOS High Sierra, podczas gdy echo -n foobar | openssl dgst -sha256dał niepoprawną odpowiedź.
pomyślny99

Odpowiedzi:

362

echozwykle wypisuje nowy wiersz, który jest pomijany za pomocą -n. Spróbuj tego:

echo -n foobar | sha256sum
mvds
źródło
76
UWAGA: w systemie OS X (BSD)echo -n foobar | shasum -a 256
Olie,
6
po prostu użyj printf;)
dylnmc
11
W systemie OSX przydatne może być utworzenie aliasu:alias sha256sum='shasum --algorithm 256'
Jonathan Cross
1
Dlaczego kończy się na * -
Philip Rego,
2
@PhilipRego To podstawa wejścia na stdin, dlatego zamiast nazwy pliku -jest wypisywana.
mvds,
100

Jeśli masz zainstalowany openssl, możesz użyć:

echo -n "foobar" | openssl dgst -sha256

W przypadku innych algorytmów można zastąpić -sha256z -md4, -md5, -ripemd160, -sha, -sha1, -sha224, -sha384, -sha512lub -whirlpool.

Farahmand
źródło
Czy istnieje sposób na określenie liczby rund, które chcesz w sha512? Patrzyłem i nie mogłem go znaleźć i zastanawiałem się, czy byś wiedział?
f1lt3r
1
@AlistairMacDonald - Nie wiem dokładnie, czego szukasz. AFAIK, SHA512 potrzebuje 80 rund; Jeśli chcesz manipulować funkcją, nie będzie to już sha512. BTW, możesz wyszukać / zadać pytanie w crypto.stackexchange.com .
Farahmand
3
W przeciwieństwie do zaakceptowanej odpowiedzi, działa to na MacOS.
weefwefwqg3
45

Jeśli polecenie sha256sum nie jest dostępne (na przykład w systemie Mac OS X 10.9 (Mavericks)), możesz użyć:

echo -n "foobar" | shasum -a 256

Sucrenoir
źródło
1
Miły! Dodałem to do mojej funkcji .bash_profile sha256 () {echo -n "$ *" | shasum -a 256} i dzwoń jak: ~ $ sha256 foobar
rbento
W przeciwieństwie do przyjętej odpowiedzi, działa to na MacOS
weefwefwqg3
Czy masz na myśli Ubuntu 10.10 (Maverick Meerkat) ? (no 's', Maverick ). Został wydany w 2010 roku, podczas gdy Mac OS X 10.9 został wydany na miesiąc przed tą odpowiedzią.
Peter Mortensen
29

echo -ndziała i jest mało prawdopodobne, że kiedykolwiek zniknie z powodu ogromnego historycznego użycia, jednak w najnowszych wersjach standardu POSIX nowe aplikacje zgodne są „zachęcane do korzystania printf”.

Nicholas Knight
źródło
8

echotworzy końcowy znak nowego wiersza, który również jest mieszany. Próbować:

/bin/echo -n foobar | sha256sum 
Nordic Mainframe
źródło
7

Uważam, że echotworzy to końcowy znak nowej linii. Spróbuj użyć -njako parametru echa, aby pominąć nowy wiersz.

Thomas Owens
źródło