Нужен кли для проверки хэша файла sha256

129

Чтобы проверить sha1 файла, который я бы использовал, openssl sha1 <file>я не уверен, что использовать для проверки хэша файла sha256, однако, что бы вы порекомендовали?

erikvold
источник

Ответы:

157

Вы можете использовать

openssl dgst -sha256 <file>

Протестировано на LibreSSL 2.6.4 на macOS 10.14 (Мохаве).


До Мохаве вы можете использовать openssl sha -sha256 <file>или openssl sha256 <file>.

Для проверки параметров командной строки для команды OpenSSL ша: openssl sha -help.

janm
источник
Это также переносимо и работает на Ubuntu.
Кристиан Бонджорно
87

OS X поставляется с командой shasum .

> which shasum
/usr/bin/shasum

Вы можете использовать:

> shasum -a 256 <file>

Больше деталей:

> shasum --help
Usage: shasum [OPTION]... [FILE]...
Print or check SHA checksums.
With no FILE, or when FILE is -, read standard input.

  -a, --algorithm   1 (default), 224, 256, 384, 512, 512224, 512256
  -b, --binary      read in binary mode
  -c, --check       read SHA sums from the FILEs and check them
  -t, --text        read in text mode (default)
  -p, --portable    read in portable mode
                        produces same digest on Windows/Unix/Mac
  -0, --01          read in BITS mode
                        ASCII '0' interpreted as 0-bit,
                        ASCII '1' interpreted as 1-bit,
                        all other characters ignored

The following two options are useful only when verifying checksums:
  -s, --status      don't output anything, status code shows success
  -w, --warn        warn about improperly formatted checksum lines

  -h, --help        display this help and exit
  -v, --version     output version information and exit

When verifying SHA-512/224 or SHA-512/256 checksums, indicate the
algorithm explicitly using the -a option, e.g.

  shasum -a 512224 -c checksumfile

The sums are computed as described in FIPS-180-4.  When checking, the
input should be a former output of this program.  The default mode is to
print a line with checksum, a character indicating type (`*' for binary,
` ' for text, `?' for portable, `^' for BITS), and name for each FILE.

Report shasum bugs to mshelor@cpan.org
Ян С.
источник
Хм, кажется, его нет на OSX 10.11.3. which shashumничего не выводит
erikvold
3
@erikvold Знаешь что? Бьюсь об заклад, я получил с инструментами командной строки Xcode. Argh. Я действительно хочу, чтобы Apple не загрязняла /usr/binнеобязательные вещи. Я должен подтвердить, что это тот случай, позже сегодня. Обновит ответ, если он действительно пришел из установки XCL.
Ян С.
2
shasumвозвращает хеш, отличный от openssl sha -sha256 <file>(последний является правильным хешем). Есть идеи почему?
ws6079
@ ws6079 shasum- это скрипт на Perl, который используется Digest::SHAдля вычисления значения хеша. Для того же файла я получаю точно такой же SHA, используя один shasumили opensslдля SHA-256хеш-вычисления. См. Gist.github.com/ianchesal/82a064b8971eb5e717ce84f3ded6dbfd
Ян С.
Шахсум отлично работает для меня сегодня.
nycynik
6

Чтобы уточнить @ полезный ответ Джона - который позволяет сравнивать данный хеш с его файлом в одной команде:

Введите shasum -a 256 -c <<<,
за которым следует необязательный пробел,
затем один тик ( '),
затем хеш для сравнения,
затем пробел
и символ режима в зависимости от того, как был создан начальный хеш:

  • ничего , если хеш был создан с -tили без опции (текстовый режим, который используется по умолчанию)

  • звездочка ( *), если хеш был создан с помощью -b(двоичный режим)

  • вопросительный знак ( ?), если хеш был создан с помощью -p(переносной режим)

  • caret ( ^), если хеш был создан с помощью -0(битовый режим)

сопровождается путем к файлу,
сопровождаемым заключительной одиночной галочкой ( ').

Как и в следующей разбивке, с разграничением скобок вокруг частей хеша и пути к файлу и квадратными скобками вокруг необязательной части «символ режима». ( Не включайте скобки или скобки в реальную жизнь - они просто здесь, чтобы детали было легко увидеть! )

shasum -a 256 -c <<< '(hashToCompare) [mode character](filepath)'

Сломано :

Фактическая команда shasumshasum -a 256 -c

  • -a 256говорит shasumиспользовать sha256 .

  • -cговорит shasum«проверить» предоставленный ввод.

Это <<<специальный набор символов Unix / Linux, называемый оператором перенаправления. Это для подачи чего-то в предыдущую команду. Используя его, мы говорим, что предоставим строку информации для shasumкоманды, которая будет использоваться в качестве ввода.

Строка входной информации должна иметь открывающие и закрывающие одиночные галочки, такие как 'some string here', или в этом случае, хэш, символ режима и путь к файлу, который нужно проверить.

  • Часть хеша внутри строки не требует ничего особенного - но за ней должен следовать пробел.

  • Часть символа режима может быть ничем, звездочкой ( *), знаком вопроса ( ?) или кареткой ( ^). Это говорит shasumо режиме, с которым был создан хеш. (Примечание: по shasumумолчанию отсутствует символ, представляющий текстовый режим .)

  • Часть filepath , это фактический путь к файлу, который нужно проверить.


Итак, вот реальный пример проверки конкретного загружаемого файла MAMP по его предполагаемому значению SHA-256 . Для *работы этой проверки необходим символ режима:

shasum -a 256 -c <<< 'f05ede012b8a5d0e7c9cf17fee0fa1eb5cd8131f3c703ed14ea347f25be11a28 *MAMP_MAMP_PRO_5.2.pkg'

Примечание: результат этой команды (для моего файла примера):

ХОРОШО:

MAMP_MAMP_PRO_5.2.pkg: ОК

или же

НЕ УДАЛОСЬ:

MAMP_MAMP_PRO_5.2.pkg: FAILED
shasum: ПРЕДУПРЕЖДЕНИЕ: 1 вычисленная контрольная сумма НЕ совпадает

Лиан
источник
Для меня это работает без звездочки перед именем файла (как и со звездочкой).
Питер З
shasum -c <<< '7cb77378a0749f2a9b7e09ea62ffb13febf3759f *sample.txt'возвращает сообщение *sample.txt: FAILED open or read. Без звездочки sample.txt: OK. Я еще не смог найти основание для использования звездочки в другом месте. Не могли бы вы уточнить?
Итак,
Означает ли наличие звездочки, что контрольная сумма, использованная в качестве ввода в примере, была сгенерирована в двоичном режиме (с --binaryопцией)? Со страницы man: «При проверке ввод должен быть прежним выводом этой программы. Режим по умолчанию - печать строки с контрольной суммой, символом, указывающим тип ( *для двоичного файла ,` `для текста, Uдля UNIVERSAL, ^для BITS, ?для портативного), и имя для каждого файла. " Итак, символы между контрольной суммой и именем файла зависят от режима, установленного при создании контрольной суммы?
Итак,
@ Софартер: да, ты прав. После некоторых экспериментов, чтобы доказать эту идею, я обновил свой пост, чтобы прояснить аспект «режима».
Линн
6

Я бы использовал эту команду.

shasum -a 256 -c <<<'_paste hash to compare here_ *_path to file goes here_'

Пример:

shasum -a 256 -c <<< '0d2ea6de4f2cbd960abb6a6e020bf6637423c07242512596691960fcfae67206 */Users/USERNAME/Downloads/someprogram.dmg'
Джон
источник