Иногда нужно проверить целостность и правильность файла, например, скаченного из Интернета. Часто производитель файла публикует хэш-сумму (результат работы хэш-функции), а пользователь может ее проверить с помощью сторонних утилит, чтобы убедиться, что файл не поврежден или не был подвергнут зловредным изменениям злоумышленником, например, заражению вирусом, внедрению вредоносного кода.
В 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.
Вообще, оригинальный вывод содержит много лишнего, утилита выводит лишнюю строку, сообщая о том, что обрабатывает указанный файл, потом выводит хэш, где каждый байт хэш-суммы через пробел, а потом еще и уведомляет нас, что операция успешно завершена (нет, бля, мы не заметили):
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 утилиты certutil
нет, потому придется пользоваться сторонними программами. Их множество, но, например, можно воспользоваться утилитой hash.exe
Она поддерживает хэш-суммы:
— MD5
— SHA1
— SHA256
— SHA512
Параметры запуска:
hash.exe <алгоритм> <путь_до_файла>
Например:
Hash.exe md5 Hash.exe
выдаст MD5-хэш самой hash.exe
:
Hash.exe 126399821fc56f045cef5af1d09e832b
Утилита использует библиотеки OpenSSL (DLL есть в комплекте) для получения хэш-функций.
Внимание! Утилита дубовая от слова ой, Древние! Внутреннего хелпа у нее нет, на любые ошибки (нет параметров, параметры перепутаны местами, файл недоступен) она просто выдаст пустую строку в выводе.
Опять же, наделал батников (на GitHub)