Что показывает контрольная сумма
Хеш-функция читает содержимое файла и выдаёт строку фиксированной длины. Даже небольшое изменение данных обычно приводит к другому результату. Поэтому контрольная сумма помогает обнаружить незавершённую загрузку, ошибку накопителя, повреждение при копировании или подмену файла относительно известного эталона.
Проверка состоит из трёх частей: выбрать тот же алгоритм, вычислить хеш именно нужного файла и побайтово сравнить строку с опубликованной. SHA-256 нельзя сравнивать с MD5: это разные алгоритмы и разная длина результата. Переименование файла не меняет хеш, а распаковка архива, повторное сохранение документа или изменение одного байта — меняет.
Для новых публикаций предпочтительны SHA-256 или SHA-512. MD5 и SHA-1 больше не считаются устойчивыми к целенаправленным коллизиям, поэтому не подходят как единственное доказательство безопасности. Если издатель предлагает только MD5, совпадение всё ещё может выявить случайное повреждение, но не должно служить основанием доверять неизвестной программе.
Хеш не сканирует файл на вирусы и не сообщает, что внутри. Вредоносный файл тоже имеет корректную контрольную сумму. Проверка доказывает лишь совпадение с тем экземпляром, для которого получен эталон. Цифровая подпись издателя, репутация источника и антивирусная проверка решают другие задачи и дополняют хеширование.
Скорость вычисления зависит от размера файла и накопителя. Утилита должна прочитать объект полностью, поэтому большой образ на медленном внешнем HDD обрабатывается несколько минут. Не закрывайте окно, пока команда не вернула итоговую строку.
Найдите надёжный эталон для сравнения
Берите контрольную сумму на официальной странице загрузки, в подписанном файле контрольных сумм либо в документации производителя. Если файл и его хеш опубликованы на одном взломанном сервере, злоумышленник способен заменить оба. Более надёжный вариант — подписанный список или контрольная сумма, полученная по независимому доверенному каналу.
Убедитесь, что эталон относится к точной версии, редакции, архитектуре и языку файла. Два установщика одной программы могут иметь разные хеши из-за цифровой подписи, времени сборки или включённых компонентов. Названия похожи, но сравнивать сумму выпуска 2.1 с файлом 2.1.1 бессмысленно.
Рядом с хешем обычно указан алгоритм: SHA256, SHA-256, SHA512, SHA-1 или MD5. Скопируйте строку целиком. Регистр букв A–F не важен, а каждый символ и ведущий ноль важны. Пробелы между группами, префикс 0x и имя файла не являются частью самой суммы.
Если непонятно, как посмотреть хеш сумму на странице производителя, найдите рядом с кнопкой загрузки раздел Checksums, Hashes, Verify download или Release files. Не используйте сумму из случайного комментария, описания ролика или каталога сторонних загрузок. Отсутствие эталона означает, что собственный хеш можно сохранить для будущего контроля, но сейчас сравнивать его не с чем.
Для нескольких файлов издатель может предложить SHA256SUMS. Внутри каждая строка содержит сумму и имя. Сначала убедитесь, что список относится к текущему выпуску. Если рядом есть цифровая подпись списка, её проверка ключом издателя даёт более сильное подтверждение, чем простой файл на той же странице.
Отдельная проверка контрольных сумм образа iso особенно важна до создания установочного носителя: повреждённый образ способен записаться без явной ошибки, а сбой проявится уже во время установки. Сначала сравните исходный ISO, затем используйте программу записи с функцией проверки, если она доступна.
Вычислите хеш в Windows
В Windows не обязательно устанавливать стороннюю программу. Откройте PowerShell или Терминал, введите Get-FileHash, пробел, затем путь к файлу в кавычках. Команда по умолчанию использует SHA-256:
Get-FileHash -LiteralPath "C:\Users\User\Downloads\file.iso"
Параметр -LiteralPath удобен, если имя содержит квадратные скобки или другие символы, которые PowerShell может трактовать как шаблон. В результате появятся Algorithm, Hash и Path. Сравнивайте поле Hash, а не путь и не размер.
Для алгоритма, указанного издателем, добавьте параметр. Например:
Get-FileHash -LiteralPath "C:\Users\User\Downloads\archive.zip" -Algorithm SHA512
Для MD5 используйте -Algorithm MD5, но только если эталон тоже MD5. Не преобразуйте SHA-256 в MD5 и не обрезайте строку: хеш всегда вычисляется заново выбранным алгоритмом.
Другой встроенный вариант — служебная команда:
certutil -hashfile "C:\Users\User\Downloads\archive.zip" SHA256
Она выводит хеш между служебными сообщениями. Название certutil не означает, что команда проверила цифровую подпись или сертификат файла: в этом режиме она лишь рассчитала контрольную сумму.
Чтобы не набирать длинный путь, введите начало команды и перетащите файл из Проводника в окно Терминала, затем проверьте появившиеся кавычки. Либо перейдите в папку командой Set-Location и укажите ./file.iso. Не запускайте загруженный исполняемый файл ради вычисления его хеша.
Для автоматического точного сравнения в PowerShell можно записать ожидаемую строку в переменную и проверить равенство без учёта регистра:
(Get-FileHash -LiteralPath "C:\path\file.iso" -Algorithm SHA256).Hash -eq "ОЖИДАЕМЫЙ_SHA256"
Результат True означает полное совпадение строк. Перед выполнением замените путь и эталон, не оставляйте примерное значение.
Проверьте файл в macOS, Linux и других сценариях
В macOS откройте Терминал и для SHA-256 выполните:
shasum -a 256 "/Users/user/Downloads/file.iso"
Для SHA-512 замените 256 на 512. Встроенная команда md5 рассчитывает MD5, если издатель использует именно его. Кавычки обязательны для пути с пробелами. Результат выводится рядом с именем файла.
В большинстве дистрибутивов Linux доступны команды sha256sum, sha512sum и md5sum:
sha256sum "/home/user/Downloads/file.iso"
Если есть список в стандартном формате, перейдите в каталог файлов и выполните sha256sum -c SHA256SUMS. Утилита сообщит OK для совпавших объектов и FAILED для отличающихся либо отсутствующих. Не выполняйте непонятные сценарии из архива только для проверки.
Для очень больших файлов не копируйте их в другую папку специально: команда читает объект на месте. Не запускайте две проверки одновременно на одном HDD, иначе головки будут переключаться между потоками и процесс займёт дольше. На сетевом диске результат зависит от стабильности соединения, но вычисляется по фактически прочитанным байтам.
Торрент-клиент использует хеши частей, записанные в метаданных раздачи. Функция принудительной перепроверки повторно читает файлы и отмечает повреждённые блоки для загрузки. Это не заменяет сравнение полного хеша с издателем, если сама раздача получена из недоверенного места. Проверяйте происхождение торрент-файла или magnet-ссылки.
При записи оптического диска включите Verify after burn, если программа предлагает проверку после записи. Она сравнивает записанные блоки с исходными данными. Простой хеш отдельного файла на диске полезен, но не проверит отсутствующие файлы и структуру всего образа. Создание нового ISO с диска может дать другой хеш из-за способа чтения и служебных данных.
Сторонние графические программы удобны для контекстного меню и пакетной обработки, но загружайте их с сайта разработчика и проверяйте подпись. Для единичной операции штатных команд достаточно. Не отправляйте конфиденциальный файл на онлайн-сервис: контрольная сумма вычисляется локально без передачи данных.
Разберитесь с несовпадением и сохраните результат
Сначала исключите ошибку сравнения. Проверьте алгоритм, версию файла и полный путь. Два файла с одинаковым именем могут лежать в разных папках. Удалите визуальные разделители из эталона, но не меняйте символы. Лучше использовать автоматическое сравнение или поиск по полной строке, чем проверять глазами только начало и конец.
Если хеш не совпал, не запускайте установщик и не пытайтесь «исправить» сумму. Удалите файл, очистите неполную загрузку и скачайте заново с официального источника. При повторном несовпадении попробуйте другую сеть или накопитель и проверьте свободное место. Менеджер загрузок должен завершить файл, а не оставлять временную копию с ожидаемым именем.
Повторяющееся повреждение разных файлов может указывать на ошибки памяти, накопителя, кабеля или сети. Проверьте SMART диска, файловую систему и оперативную память, особенно если архиваторы тоже сообщают CRC error. Не делайте вывод о неисправности только по одному файлу: издатель мог обновить сборку, но забыть заменить хеш на странице.
Совпадение означает, что локальный файл соответствует эталонному набору байтов. После этого для программы дополнительно проверьте цифровую подпись в свойствах файла и имя подписанта. Если система предупреждает о неизвестном издателе, один корректный SHA-256 не делает объект безопасным без доверия к источнику эталона.
Для собственного архива храните суммы в отдельном текстовом файле и делайте резервную копию списка. В Linux стандартный формат можно создать командой sha256sum * > SHA256SUMS, но шаблон охватывает только файлы текущего каталога и не включает вложенные папки. В PowerShell для набора файлов используйте Get-FileHash и экспортируйте результат в CSV с понятными путями.
Периодическая проверка архива обнаруживает изменение, но не восстанавливает данные. Нужны как минимум независимые резервные копии. Если один файл испортился, эталонный хеш показывает проблему, а вернуть содержимое можно только из исправной копии.
FAQ
Можно ли сравнить SHA-256 и MD5 одного файла?
Нет. Один файл имеет разные строки для разных алгоритмов. Вычислите именно тот алгоритм, который указан возле эталона. Совпадать должны тип хеша и все символы результата.
Почему одинаковые документы имеют разные суммы?
Внутри могут отличаться метаданные, время сохранения, встроенная миниатюра, порядок объектов или один невидимый символ. Хеш сравнивает байты, а не визуальный вид. Даже повторное сохранение способно изменить файл.
Проверка хеша гарантирует отсутствие вирусов?
Нет. Она подтверждает совпадение с эталоном. Если эталон принадлежит доверенному издателю и получен безопасно, это помогает выявить подмену. Но вредоносный оригинал тоже даст ожидаемый хеш, поэтому нужны подпись и защитная проверка.
Имеет ли значение регистр букв в хеше?
Нет, шестнадцатеричные A–F и a–f обозначают одинаковые значения. Имеют значение длина, порядок символов и ведущие нули. Сравнивайте строку целиком, исключив только пробелы-разделители.
