Створення SHA-256 хеша з командного рядка Linux


234

Я знаю, що рядок "foobar" генерує хеш SHA-256 c3ab8ff13720e8ad9047dd39466b3c8974e592c2fa383d4a3960714caef0c4f2за допомогою http://hash.online-convert.com/sha256-generator

Однак оболонка командного рядка:

hendry@x201 ~$ echo foobar | sha256sum
aec070645fe53ee3b3763059376134f058cc337247c978add178b6ccdfb0019f  -

Створює інший хеш. Що я пропускаю?


4
sha256sum < foobar. Немає необхідності в коті , ехо , printf , ... Дивіться також Марне використання кота?
коппор

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дав неправильну відповідь.
сприятливий99

Відповіді:


362

echoзазвичай виводить новий рядок, який придушується -n. Спробуйте це:

echo -n foobar | sha256sum

76
ПРИМІТКА: в ОС X (BSD), цеecho -n foobar | shasum -a 256
Олі,

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

3
На відміну від прийнятої відповіді, це працює для MacOS.
weefwefwqg3

45

Якщо команда sha256sum недоступна (наприклад, на Mac OS X v10.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) ? (ні 's', Маверик ). Він вийшов у 2010 році, тоді як Mac OS X v10.9 був випущений за місяць до цієї відповіді.
Пітер Мортенсен

29

echo -nпрацює і навряд чи колись зникне через масштабне історичне використання, однак за останніми версіями стандарту POSIX нові програми, що відповідають вимогам, "заохочуються до використання printf".



7

Я вважаю, що це echoвиводить новий рядок. Спробуйте використовувати -nяк параметр для відлуння, щоб пропустити новий рядок.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.