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 в комплекте)

Консольный hello, world на MASM32. Трактат с подробным разбором, лирическими отступлениями и дополнениями

Преамбула

Итак, обещал рассказать, как все-таки написать консольный Hello, world на ассемблере, и выбрал для этого MASM, потому что TASM’овский компилятор довольно давно полумертв, и не умеет из коробки некоторых базовых вещей, например, не умеет указывать подсистему (это изменение одного поля в заголовке PE-файла), в которой должна работать программа под Win32. Подсистем есть несколько, но нас пока интересуют две: WINDOWS и CONSOLE. Первая, для оконных приложений, а вторая — для консольных. Если ОС будет видеть, что приложение консольное, она проверит, открыта ли для него консоль уже (если мы запускаем приложение через cmd, или Far manager, например), и откроет для него консоль, если мы запускаем приложение из оконной среды, щелкая по экзешнику мышкой. Это избавляет нас от геморроя, вручную контролировать консоль, открывать ее, закрывать, освобождать. Хотя, принципиальных ограничений нет — консольное приложение спокойно может открыть, как стандартное диалоговое окно, так и вообще создать полноценную форму, а оконное приложение — открыть консоль.
Далее под катом…

Автограф Горбачева

Оказываюсь на какой-то конференции, куча всяких политиков и деятелей, видел в толпе Мырзина, Витухновскую, Латынину. И тут идет Горбачев. Я у кого-то рядом со мной вырываю листок, и расталкивая всех остальных, проламываюсь к Михаилу Сергеевичу, еще думаю — Ельцин помер, Кравчук помер, Шушкевич помер, а такие люди были, надо хоть у Горбачева взять автограф.

Интересно, что во сне ощущаю себя подростком. Горбачев меня как-то по-доброму по голове потрепал, а потом взял огрызок листка и расписался.

Самое странное — подпись была настоящая, я с Википедией сравнивал. А до этого я подписи Горбачева не видел, после сна нашел.