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?


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

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.


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


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


8

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

/bin/echo -n foobar | sha256sum 

7

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.