Windows, CMD/BAT: получить MD5 и другие хэш-суммы для файлов.

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

Windows 7 и выше

В Windows 7 присутствует стандартная утилита certutil, предназначенная для работы с сертификатами и хранилищами сертификатов, но она умеет вычислять и хэш-суммы файлов.

certutil -hashfile <путь_до_файла>

По умолчанию утилита генерирует хэш SHA1

Чтобы сгенерировать хэш-сумму по другому алгоритму, нужно вызвать утилиту так:

certutil -hashfile <путь_до_файла> <алгоритм>

где <алгоритм> — один из поддерживаемых алгоритмов (регистр символов в названии алгоритма значения не имеет)

Поддерживаемые алгоритмы:

— MD2
— MD4
— MD5
— SHA1
— SHA256
— SHA384
— SHA512

Например, чтобы получить MD5-хэш надо вызвать утилиту со следующими параметрами:

certutil -hashfile <путь_до_файла> MD5

Проще всего наделать батников для каждого (или нужных) алгоритмов, да положить их в один из PATH-каталогов, например, для получения MD5-хэша можно создать MD5.BAT со следующим кодом:

@certutil -hashfile %1 MD5

Впрочем, я для вас заморочился. Тут можно взять батник для каждого алгоритма, или скачать SFX-архив для самых ленивых. Распакуется в директорию Windows.

Улучшаем BAT-файлы

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

N:\BatTest\win7\simple>certutil -hashfile MD5.BAT MD5
MD5 хеш файла MD5.BAT:
9b e2 27 09 ed 09 0a 23 9e 55 52 6b 44 04 a5 33
CertUtil: -hashfile - команда успешно выполнена.

Делаем так, чтобы батник отображал только строку с хэшем и без всяких пробелов.

1. Поскольку, язык BAT/CMD беден на операции со строками, нам придется скачать стороннюю, заимствованную из Linux утилиту awk, и добавить специальную команду, чтоб утилита оставила нам только вторую строку в выводе:

certutil -hashfile MD5.BAT MD5 | awk NR==2
b9 cb 1e 4b 57 f7 77 dd 67 ee a1 61 2e c4 32 20

Скачать утилиту awk для Windows можно здесь.

2. Удалить пробелы можно тоже с помощью awk:

awk "{ gsub(/ /,//); print }"

Весь батник целиком:

@certutil -hashfile %1 MD5|awk NR==2|awk "{ gsub(/ /,//); print }"

Вывод:

N:\BatTest\win7\ one-hash>MD5.bat MD5.bat
b310116e1fa1241e916717515212c1a01f116913e147144

Готовые .BAT-файлы на GitHub
SFX-архив (распаковывается в директорию Windows, awk в комплекте)

Windows XP и выше

В Windows XP утилиты certutil нет, потому придется пользоваться сторонними программами. Их множество, но, например, можно воспользоваться утилитой hash.exe

Она поддерживает хэш-суммы:

— MD5
— SHA1
— SHA256
— SHA512

Параметры запуска:

hash.exe <алгоритм> <путь_до_файла>

Например:

Hash.exe md5 Hash.exe

выдаст MD5-хэш самой hash.exe:

Hash.exe 126399821fc56f045cef5af1d09e832b

Утилита использует библиотеки OpenSSL (DLL есть в комплекте) для получения хэш-функций.

Внимание! Утилита дубовая от слова ой, Древние! Внутреннего хелпа у нее нет, на любые ошибки (нет параметров, параметры перепутаны местами, файл недоступен) она просто выдаст пустую строку в выводе.

Опять же, наделал батников (на GitHub)

И SFX-архив для ленивых (hash.exe и DLL в комплекте)

Добавить комментарий

Ваш адрес email не будет опубликован.