Генерация хэша SHA-256 из командной строки Linux


234

Я знаю, что строка "foobar" генерирует хеш SHA-256 c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2с использованием http://hash.online-convert.com/sha256-generator

Однако командная строка оболочки:

hendry@x201 ~$ echo foobar | sha256sum
aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f  -

Создает другой хэш. Чего мне не хватает?


4
sha256sum < foobar, Нет необходимости в cat , echo , printf , ... Смотрите также Бесполезное использование cat?
Коппор

7
@koppor < foobarэто не то же самое, что echo foobar |. Эквивалентом echo foobar |будет, sha256sum <<< foobarно это добавляет новую строку в foobar, как echo.
MVDS

openssl dgst -sha256 foobarу меня работает на MacOS High Sierra, тогда как echo -n foobar | openssl dgst -sha256дал неверный ответ.
auspicious99

Ответы:


362

echoобычно выводит новую строку, которая подавляется с помощью -n. Попробуй это:

echo -n foobar | sha256sum

76
ПРИМЕЧАНИЕ: на OS X (BSD) этоecho -n foobar | shasum -a 256
Olie

6
просто используйте printf;)
dylnmc

11
На OSX было бы удобно создать псевдоним:alias sha256sum='shasum --algorithm 256'
Джонатан Кросс

1
Почему это заканчивается * -
Филипп Рего

2
@PhilipRego Это шазум ввода на stdin, поэтому вместо имени файла -печатается.
mvds

100

Если вы установили openssl, вы можете использовать:

echo -n "foobar" | openssl dgst -sha256

Для других алгоритмов можно заменить -sha256с -md4, -md5, -ripemd160, -sha, -sha1, -sha224, -sha384, -sha512или -whirlpool.


Есть ли способ указать количество раундов, которые вы хотите в sha512? Я посмотрел и не смог найти его и подумал, а знаешь ли ты?
f1lt3r

1
@AlistairMacDonald - я не знаю точно, что вы ищете. AFAIK, SHA512 нужно 80 раундов; Если вы хотите манипулировать функцией, это больше не будет sha512. Кстати, вы можете искать / задать свой вопрос в crypto.stackexchange.com .
Фараманд

3
В отличие от принятого ответа, это работает для MacOS.
weefwefwqg3

45

Если команда sha256sum недоступна (например, в Mac OS X 10.9 (Mavericks)), вы можете использовать:

echo -n "foobar" | shasum -a 256


1
Ницца! Я добавил это в мою функцию .bash_profile sha256 () {echo -n "$ *" | shasum -a 256} и вызовите как: ~ $ sha256 foobar
rbento

В отличие от принятого ответа, это работает для MacOS
weefwefwqg3

Или вы имеете в виду Ubuntu 10.10 (Maverick Meerkat) ? (нет, Мэверик ). Он был выпущен в 2010 году, тогда как Mac OS X v10.9 была выпущена за месяц до этого ответа.
Питер Мортенсен

29

echo -nработает и вряд ли когда-либо исчезнет из-за массового использования в прошлом, однако в последних версиях стандарта POSIX « новые» приложения «рекомендуется» использовать printf.



7

Я считаю, что echoвыводит завершающий перевод строки. Попробуйте использовать -nв качестве параметра echo для пропуска новой строки.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.