Что такое контрольная сумма — и как проверить, что файл скачался целым

У тебя в кошельке лежит контрольная сумма. Это последняя цифра номера карты.
Поэтому сайт замечает опечатку раньше, чем спросит банк. Он не знает твоего баланса. Он просто посчитал цифры и увидел: так не бывает.
Тем же приёмом ты можешь проверить модель на 7 ГБ, которая скачивалась полночи. Сейчас покажу как.
Что такое контрольная сумма?
Контрольная сумма — это короткое значение, посчитанное из данных. Изменились данные — изменилось и оно.
Отправитель считает значение и передаёт его рядом с файлом. Ты считаешь то же самое у себя и сравниваешь. Совпало — файл дошёл без искажений. Не совпало — что-то по дороге испортилось.
Важная деталь: сравниваются не файлы. Сравниваются две короткие строки. Поэтому ничего заново качать не надо.
Как это работает
Есть три уровня, от простого к сильному.
Алгоритм Луна — номера карт. Цифры складываются по простому правилу, сумма должна делиться на 10. Я проверил на тестовой карте 4242 4242 4242 4242: она проходит. Поменял последнюю цифру — не проходит. Поменял местами две соседние — тоже. Именно такие опечатки люди и делают.
CRC — архивы и сеть. Быстрый и короткий код. Он лежит в каждом zip-файле и в каждом кадре Ethernet. Ловит случайные сбои, но подделать его легко.
SHA-256 — файлы и пакеты. Это уже криптографический хеш. Смотри, что он делает с разницей в одну букву:
$ printf 'hello world\n' | sha256sum
a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447 -
$ printf 'hello World\n' | sha256sum
0c23d0ceae909c42439cbb3069887888cb829f6c9d2c93966c944c65a6b6ed59 -
Одна заглавная буква — и совпадений не видно вообще. Поэтому глазами хватает сверить начало и конец строки.
Как проверить скачанный файл
Посчитай сумму у себя:
# Linux
sha256sum model.safetensors
# macOS
shasum -a 256 model.safetensors
# Windows PowerShell
Get-FileHash model.safetensors -Algorithm SHA256
Если проект даёт файл с суммами, сверка делается одной командой:
sha256sum -c SHA256SUMS
Ответ будет model.safetensors: OK или FAILED. Я дописал в файл один символ и получил FAILED с кодом выхода 1. Значит, это можно вставить в скрипт: код выхода сам остановит цепочку.
Сумма есть только текстом на странице? Не сверяй 64 символа глазами, отдай это терминалу:
echo "a948904f…a447 model.bin" | sha256sum -c -
Вместо многоточия подставь сумму целиком. Между суммой и именем файла ровно два пробела. А Get-FileHash в Windows печатает заглавные буквы, это та же самая сумма.
А вот случай именно про ИИ. На Hugging Face большие файлы хранятся через LFS, и их SHA-256 отдаётся публично:
curl -s https://huggingface.co/api/models/openai/whisper-tiny/tree/main
В ответе у model.safetensors есть поле oid. Для whisper-tiny это 7ebd0e69e7…2395. Это и есть SHA-256 файла. Скачал модель, посчитал сумму, сравнил. Обрыв на 95 % ты увидишь сразу, а не через час непонятных ошибок при загрузке.
Где ты уже с этим встречаешься
Ты пользуешься контрольными суммами каждый день, просто их не видишь:
package-lock.json— полеintegrityу каждого пакета. npm сверяет его при установке и падает при несовпадении. Частая причина ошибок установки.scriptс атрибутомintegrity— браузер не запустит файл с CDN, если тот изменился.- Git — номер коммита и есть хеш всего содержимого. Поэтому историю нельзя тихо подменить.
От чего это не спасёт
Вот самая частая ошибка. Сумма защищает от случайной порчи. От злоумышленника — только если она пришла из другого места.
Подумай сам. Хакер взломал сайт и подменил файл. Сумма лежит на том же сайте. Что мешает подменить и её?
В феврале 2016 года так взломали сайт Linux Mint: ссылка на образ вела на версию с бэкдором. Проверка суммы помогала, только если сверяться с источником, которого атака не коснулась.
Отсюда простое правило:
- Боишься обрыва и сбоя диска — сумма с того же сайта подходит.
- Боишься подмены — бери сумму из другого канала или проверяй цифровую подпись, например через GPG.
Контрольная сумма и хеш — это одно и то же?
Почти. Хеш — способ посчитать, контрольная сумма — то, для чего его используют. CRC считается контрольной суммой, но криптографическим хешем не является.
MD5 ещё можно использовать?
Для проверки на случайную порчу — да, он быстрый. Для защиты от подделки — нет: коллизии для него создаются намеренно. Если есть выбор, бери SHA-256.
Зачем сверять, если загрузка прошла без ошибок?
Браузер не всегда замечает обрыв, особенно у больших файлов и через прокси. Файл на 7 ГБ стоит одной команды проверки.
Короткие уроки-истории, симулятор агента и ежедневная практика — в нашем мобильном приложении. Бесплатно.





