Как проверить контрольную сумму файла и убедиться в целостности
Пошаговое руководство по вычислению и проверке хешей файлов для верификации скачиваний, резервных копий и защиты от повреждений.
Вы скачали образ Linux на 4 ГБ, а при установке система ругается на битый файл. Или загрузили важный архив с резервными копиями, но он не распаковывается. Контрольная сумма (хеш) помогает понять, что файл дошёл без искажений — ещё до того, как вы потратите время на работу с ним.
Что такое контрольная сумма и зачем она нужна
Контрольная сумма — это уникальная строка символов, вычисленная из содержимого файла математическим алгоритмом. Один бит отличия в файле — и хеш полностью меняется. Самые популярные алгоритмы: MD5, SHA-1, SHA-256.
Основные сценарии использования:
- Проверка целостности скачиваний — дистрибутивы Linux, официальные образы Windows, крупные архивы всегда публикуют хеш на сайте
- Защита от подмены — если кто-то модифицировал файл (вредонос, MITM-атака), хеш не совпадёт
- Контроль резервных копий — убедиться, что бэкап не повредился на диске или в облаке
- Дедупликация — облачные хранилища сравнивают хеши, чтобы не хранить одинаковые файлы дважды
Как вычислить хеш в командной строке
Linux и macOS
В терминале доступны готовые утилиты:
# MD5
md5sum файл.iso
# SHA-256
sha256sum файл.iso
# На macOS команды чуть другие
md5 файл.iso
shasum -a 256 файл.iso
Вывод выглядит так:
a3f2e1b4c5d6... файл.iso
Первая часть — сам хеш, вторая — имя файла.
Windows
Используйте встроенную утилиту certutil:
certutil -hashfile файл.iso MD5
certutil -hashfile файл.iso SHA256
Или PowerShell:
Get-FileHash файл.iso -Algorithm SHA256
Get-FileHash файл.iso -Algorithm MD5
Как проверить совпадение хеша
Допустим, вы скачали ubuntu-24.04-desktop-amd64.iso. На сайте Ubuntu указан SHA-256:
2c2f9b5e8a3d1f... (официальный хеш с сайта)
Вычисляете хеш локального файла:
sha256sum ubuntu-24.04-desktop-amd64.iso
Получаете:
2c2f9b5e8a3d1f... ubuntu-24.04-desktop-amd64.iso
Совпадает символ в символ — файл целый. Хоть один символ отличается — файл повреждён или подменён.
Автоматическая проверка
Многие проекты публикуют файл с хешами (например, SHA256SUMS). Проверка в одну команду:
sha256sum -c SHA256SUMS
Утилита пройдёт по списку, проверит все файлы и покажет OK или FAILED для каждого.
MD5, SHA-1 или SHA-256: какой выбрать
MD5 — устарел для задач безопасности (возможны коллизии — разные файлы с одинаковым хешем), но всё ещё подходит для быстрой проверки целостности скачиваний. Самый быстрый из трёх.
SHA-1 — компромисс, но тоже считается устаревшим. С 2017 года доказана уязвимость к коллизиям.
SHA-256 — стандарт сегодня. Криптостойкий, используется везде: от блокчейна до сертификатов SSL. Если нужна безопасность, только он.
Практический совет: для проверки скачиваний подойдёт любой алгоритм, который указал разработчик. Для подписи собственных файлов или архивов — используйте SHA-256 или выше (SHA-512).
Графические инструменты для проверки хеша
Не все хотят лезть в терминал. Альтернативы:
- HashTab (Windows) — расширение проводника, добавляет вкладку с хешами в свойствах файла
- GtkHash (Linux) — GUI-приложение с поддержкой всех популярных алгоритмов
- QuickHash (Windows, Linux, macOS) — кросс-платформенная утилита с пакетной обработкой
Онлайн-калькуляторы тоже существуют, но загружать конфиденциальные файлы на чужой сервер — сомнительная идея. Используйте их только для публичных данных.
Частые ошибки при проверке
Ошибка 1: Сравниваете хеш до завершения скачивания. Браузер может показывать файл в папке, пока ещё дописывает последние мегабайты. Дождитесь 100%.
Ошибка 2: Путаете алгоритмы. Сайт дал SHA-256, а вы вычислили MD5 — конечно не совпадёт.
Ошибка 3: Опечатка в имени файла или лишний пробел в команде. sha256sum file.iso (с пробелом) может дать неожиданный результат в некоторых скриптах.
Ошибка 4: Игнорируете регистр. Хеши обычно в нижнем регистре, но если копируете с сайта — проверьте, нет ли случайных заглавных букв.
Автоматизация проверки в скриптах
Если регулярно скачиваете и проверяете файлы, напишите простой скрипт. Пример для Linux:
#!/bin/bash
FILE="ubuntu-24.04-desktop-amd64.iso"
EXPECTED="2c2f9b5e8a3d1f4b7c9e2a5d8f1b4e7c"
ACTUAL=$(sha256sum "$FILE" | awk '{print $1}')
if [ "$ACTUAL" = "$EXPECTED" ]; then
echo "✓ Хеш совпал, файл целый"
else
echo "✗ Хеш не совпал! Файл повреждён или подменён"
exit 1
fi
Для Windows аналогичный скрипт на PowerShell:
$file = "ubuntu-24.04-desktop-amd64.iso"
$expected = "2c2f9b5e8a3d1f4b7c9e2a5d8f1b4e7c"
$actual = (Get-FileHash $file -Algorithm SHA256).Hash.ToLower()
if ($actual -eq $expected) {
Write-Host "✓ Хеш совпал" -ForegroundColor Green
} else {
Write-Host "✗ Хеш не совпал" -ForegroundColor Red
exit 1
}
Дополнительные инструменты для работы с файлами
Проверка хеша — лишь один из шагов работы с файлами. Если нужно быстро узнать размер, тип или другие метаданные, попробуйте Информация о файле — инструмент показывает детали без скачивания файла на устройство. Для кодирования данных в Base64 (например, для передачи бинарных файлов через JSON API) пригодится Base64 кодировщик.