Доброго времени суток!
Как часто вы проверяете скачиваемые файлы на равенство хеш-сумм? Я — никогда. Но сегодня я почему-то решил порвать с этой порочной практикой и сделать свою жизнь более безопасной.
Согласитесь, основная причина не сравнивать хеш-сумму файла — это лень. Нужно искать какую-нибудь программу, запускать ее, натравливать на файл, и это просто уйма действий. Как можно упростить эту процедуру? Я не придумал ничего лучше, чем добавить в контекстное меню файла опцию «Посчитать хеш». Интересующимся предлагаю краткую инструкцию.
Берем отсюда File Checksum Integrity Verifier utility — консольную утилиту для вычисления и сравнения хешей MD5 и SHA-1 от Microsoft. Там же можно прочитать, что это за зверь и с чем его едят. Скачанный файл Windows-KB841290-x86-ENU.exe можно открыть как zip архив и увидеть, что он содержит два файла: собственно fciv.exe и ReadMe.txt, содержащий справку к утилите. Файл ReadMe нас не интересует, а fciv.exe нужно поместить в одну из директорий, прописанных в переменной PATH, дабы вызывать ее из командной строки без указания полного пути. Я поместил в system32. Проверить, что утилита работает, можно, натравив ее из командной строки на любой файл:
Для расширения контекстного меню файлов нужно будет немного подшаманить в реестре.
Запускаем regedit.exe, идем в HKEY_CLASSES_ROOT\* — это раздел, отвечающий за контекстное меню всех типов файлов. В разделе shell создаем подраздел с любым именем (у меня это fciv_md5). В параметре по умолчанию прописываем желаемое название пункта меню (напрмер, Compute MD5). У созданного подраздела (fciv_md5) создаем еще один подраздел с именем command, и у него в параметре по умолчанию прописываем магическую строчку:
Строка предписывает запустить cmd.exe с командой
Для добавления пункта для вычисления SHA-1 проделываем ту же последовательность действий, меняя лишь названия. Команда в этом случае выглядит так:
Должно получиться что-то вроде этого:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/cc0/7bd/f4b/cc07bdf4b05f305a184d787251ee03ff.png)
Все вышеперечисленное одним файлом:
Раз:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/b74/b74/9f7/b74b749f74b7f3dc65a2dc22cf054e6f.png)
Два:
![](https://habrastorage.org/r/w1560/getpro/habr/post_images/a45/496/7d2/a454967d2dc94dbe66047265e4c7b9ed.png)
Всем добра и совпадающих хешей!
UPD. Как подсказывает navion в первом комментарии, можно обойтись без установки FCIV и использовать встроенную утилиту CertUtil. В таком случае п.1 становится неактуальным, а команда в regedit меняется на:
для MD5:
для SHA1:
и, кроме того, появляется возможность вычислять SHA256 хеш:
Как часто вы проверяете скачиваемые файлы на равенство хеш-сумм? Я — никогда. Но сегодня я почему-то решил порвать с этой порочной практикой и сделать свою жизнь более безопасной.
Согласитесь, основная причина не сравнивать хеш-сумму файла — это лень. Нужно искать какую-нибудь программу, запускать ее, натравливать на файл, и это просто уйма действий. Как можно упростить эту процедуру? Я не придумал ничего лучше, чем добавить в контекстное меню файла опцию «Посчитать хеш». Интересующимся предлагаю краткую инструкцию.
1. Установка программы
Берем отсюда File Checksum Integrity Verifier utility — консольную утилиту для вычисления и сравнения хешей MD5 и SHA-1 от Microsoft. Там же можно прочитать, что это за зверь и с чем его едят. Скачанный файл Windows-KB841290-x86-ENU.exe можно открыть как zip архив и увидеть, что он содержит два файла: собственно fciv.exe и ReadMe.txt, содержащий справку к утилите. Файл ReadMe нас не интересует, а fciv.exe нужно поместить в одну из директорий, прописанных в переменной PATH, дабы вызывать ее из командной строки без указания полного пути. Я поместил в system32. Проверить, что утилита работает, можно, натравив ее из командной строки на любой файл:
fciv -md5 C:\test.dat
— для вычисления MD5 fciv -sha1 C:\test.dat
— для вычисления SHA-1 2. Создание элемента контекстного меню
Для расширения контекстного меню файлов нужно будет немного подшаманить в реестре.
Запускаем regedit.exe, идем в HKEY_CLASSES_ROOT\* — это раздел, отвечающий за контекстное меню всех типов файлов. В разделе shell создаем подраздел с любым именем (у меня это fciv_md5). В параметре по умолчанию прописываем желаемое название пункта меню (напрмер, Compute MD5). У созданного подраздела (fciv_md5) создаем еще один подраздел с именем command, и у него в параметре по умолчанию прописываем магическую строчку:
cmd.exe /k fciv -md5 "%1"
Строка предписывает запустить cmd.exe с командой
fciv -md5 "%1"
и отобразить результат. Для добавления пункта для вычисления SHA-1 проделываем ту же последовательность действий, меняя лишь названия. Команда в этом случае выглядит так:
cmd.exe /k fciv -sha1 "%1"
Должно получиться что-то вроде этого:
![](https://habrastorage.org/getpro/habr/post_images/cc0/7bd/f4b/cc07bdf4b05f305a184d787251ee03ff.png)
Все вышеперечисленное одним файлом:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\fciv_md5]
@="Compute MD5"
[HKEY_CLASSES_ROOT\*\shell\fciv_md5\command]
@="cmd.exe /k fciv -md5 \"%1\""
[HKEY_CLASSES_ROOT\*\shell\fciv_sha]
@="Compute SHA"
[HKEY_CLASSES_ROOT\*\shell\fciv_sha\command]
@="cmd.exe /k fciv -sha1 \"%1\""
3. Вычисляем SHA-1 хеш двумя кликами мыши:
Раз:
![](https://habrastorage.org/getpro/habr/post_images/b74/b74/9f7/b74b749f74b7f3dc65a2dc22cf054e6f.png)
Два:
![](https://habrastorage.org/getpro/habr/post_images/a45/496/7d2/a454967d2dc94dbe66047265e4c7b9ed.png)
Всем добра и совпадающих хешей!
UPD. Как подсказывает navion в первом комментарии, можно обойтись без установки FCIV и использовать встроенную утилиту CertUtil. В таком случае п.1 становится неактуальным, а команда в regedit меняется на:
для MD5:
cmd.exe /k CertUtil -hashfile "%1" MD5
для SHA1:
cmd.exe /k CertUtil -hashfile "%1" SHA1,
и, кроме того, появляется возможность вычислять SHA256 хеш:
cmd.exe /k CertUtil -hashfile "%1" SHA256