Генерация хэша 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
MVDS
источник
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.

Farahmand
источник
Есть ли способ указать количество раундов, которые вы хотите в 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

Sucrenoir
источник
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.

Николас Найт
источник
8

echoпроизводит завершающий символ новой строки, который тоже хэшируется. Пытаться:

/bin/echo -n foobar | sha256sum 
Скандинавский мэйнфрейм
источник
7

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

Томас Оуэнс
источник