Что такое контрольная сумма?
Контрольная сумма (checksum) это короткое значение, вычисленное по блоку данных, например файлу или сетевому пакету, которое хранится или передаётся вместе с ним. Если позже вычислить его снова и сравнить два значения, станет видно, изменились ли данные из-за повреждения или ошибки передачи.
Обновлено 24 сентября 2026 г.
| Контрольная сумма | Отправлено | Получено | Результат |
|---|---|---|---|
| Сумма байтов (mod 256) | 1F | 1F | Совпадает |
| CRC-32 | 486C211B | 486C211B | Совпадает |
Инвертируй один бит, и обе контрольные суммы изменятся. Поменяй местами два символа: все байты на месте, поэтому их сумма та же. Заметит только CRC-32, которая зависит от порядка.
Дистрибутивы Linux, например Ubuntu и Debian, публикуют рядом с установочными образами файл SHA256SUMS. В каждой его строке записаны 64-символьная строка и имя файла. Когда скачивание закончится, ты запускаешь одну команду для полученного файла. Если она выведет ту же строку, все миллиарды его байтов дошли целыми. Если по дороге перевернулся хотя бы один бит, строка получится совсем другой.
Эта строка и есть контрольная сумма: небольшое резюме, которое меняется, когда меняются данные.
Как работает контрольная сумма, шаг за шагом
- Отправитель прогоняет по данным алгоритм контрольной суммы, байт за байтом, и получает короткий результат.
- Результат передаётся или хранится вместе с данными: в заголовке сетевого пакета, внутри ZIP-файла рядом с каждым сжатым файлом или на странице загрузки.
- Получатель прогоняет тот же алгоритм по данным, которые он действительно получил.
- Два результата сравниваются. Если они равны, данные почти наверняка не изменились. Если различаются, данные повреждены, и получатель их отклоняет, запрашивает снова или показывает ошибку контрольной суммы.
Контрольная сумма только обнаруживает повреждение; она не может сказать, какой байт изменился, и не может его восстановить. Для восстановления нужен код с исправлением ошибок, например коды Рида-Соломона на компакт-дисках и в QR-кодах.
Простейшая контрольная сумма складывает все байты и оставляет последние 8 битов суммы. Запусти этот код, чтобы увидеть, где эта идея работает, а где нет:
original sum= 78 crc32=a1628836
flipped sum= 80 crc32=a597580b
swapped sum= 78 crc32=59dbf74b
Замена символа меняет сумму. Перестановка двух символов не меняет, потому что сложению неважен порядок, и сумма байтов одобряет платёж в 10 вместо 100. CRC-32 (циклический избыточный код) рассматривает данные как одно длинное двоичное число и делит его на фиксированный 33-битный многочлен; 32-битный остаток зависит от положения каждого бита, поэтому перестановка обнаруживается. Демонстрация выше позволяет попробовать это на своём тексте. CRC-32 обнаруживает любую пачку ошибок длиной до 32 битов.
Распространённые алгоритмы контрольных сумм
| Алгоритм | Размер | Где встречается |
|---|---|---|
| Бит чётности | 1 бит | Последовательные соединения, память с контролем чётности |
| Контрольная цифра Луна | 1 цифра | Номера банковских карт, номера IMEI |
| Контрольная сумма интернета | 16 битов | Заголовки IPv4, TCP и UDP |
| Adler-32 | 32 бита | Формат сжатия zlib |
| CRC-32 | 32 бита | ZIP, gzip, PNG, кадры Ethernet |
| MD5 | 128 битов | Старые страницы загрузки, поиск дубликатов файлов |
| SHA-256 | 256 битов | Загрузка программ, образы Linux, Bitcoin |
Первые пять ловят случайности, а не злоумышленников. Тот, кто редактирует файл, может подогнать несколько байтов так, чтобы CRC-32 снова совпал. MD5 и SHA-256 это криптографические хеш-функции, устроенные так, чтобы найти два входа с одинаковым результатом было практически невозможно. С тех пор MD5 взломан (коллизии опубликованы в 2004 году), как и SHA-1 (2017), поэтому для загрузок, где важна безопасность, используют SHA-256 или что-то сильнее. Случайные повреждения MD5 по-прежнему отлично ловит.
Как проверить контрольную сумму
На твоём компьютере в каждой операционной системе есть встроенная команда:
# Windows (PowerShell)
Get-FileHash ubuntu.iso -Algorithm SHA256
# macOS
shasum -a 256 ubuntu.iso
# Linux
sha256sum ubuntu.iso
Сравни вывод со значением на официальной странице загрузки; заглавные или строчные буквы значения не имеют. В Python ту же проверку делает hashlib, читая файл частями, чтобы файл на 6 ГБ никогда не пришлось целиком держать в памяти:
a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447
OK
Замени hello world на hello World и запусти снова: изменится каждый символ контрольной суммы, а последняя строка скажет Checksum mismatch.
Что такое ошибка контрольной суммы?
Ошибка контрольной суммы (checksum error) означает, что проверка не прошла: значение, вычисленное по имеющимся у тебя данным, не совпадает со значением, которое хранилось или передавалось вместе с ними. Либо изменились данные, либо повреждена сама сохранённая контрольная сумма. Сообщение и способ исправления зависят от того, где она появляется.
Ошибка контрольной суммы CMOS или BIOS при включении
Прошивка ПК (BIOS или UEFI) хранит свои настройки, например порядок загрузки и часы, в небольшой памяти, которую питает батарейка-таблетка, обычно CR2032, пока компьютер отключён от сети. Рядом с настройками хранится их контрольная сумма. При каждом включении прошивка вычисляет её заново, и если значения различаются, показывает сообщение вроде CMOS Checksum Error - Defaults Loaded и возвращается к заводским настройкам.
Обычная причина это слабая или севшая батарейка, особенно если заодно сбрасываются часы. Отключение питания во время сохранения настроек или сброс CMOS перемычкой дают тот же результат. Чтобы исправить:
- Открой экран настроек (обычно Delete или F2 при включении ПК), установи дату, время и все параметры, которые ты менял, затем сохрани и выйди (часто F10). Если сообщение больше не появляется, это был разовый случай.
- Если оно возвращается после каждого холодного старта, выключи компьютер, отключи его от сети и замени батарейку CR2032.
- Если в сообщении упомянута сама прошивка, например
BIOS ROM checksum errorилиMain BIOS checksum error, повреждён образ прошивки. Платы с резервной микросхемой BIOS восстанавливают его автоматически; на остальных воспользуйся функцией восстановления BIOS на плате или заново прошей прошивку с сайта производителя, не отключая питание во время обновления.
Несовпадение контрольной суммы после скачивания
SHA-256 твоего файла не совпадает с указанной на странице загрузки. Файл может быть неполным или повреждённым (прерванное соединение, заполненный диск), ты можешь сравнивать с контрольной суммой другого файла (другой версии или архитектуры процессора) или сравнивать два разных алгоритма: значение MD5 занимает 32 шестнадцатеричных символа, значение SHA-256 64. Изредка файл оказывается подменённым.
Проверь алгоритм и имя файла, затем скачай файл заново с официального сайта. Если свежая копия из официального источника всё равно не совпадает, не запускай её. Менеджеры пакетов делают эту проверку за тебя: pip останавливается с THESE PACKAGES DO NOT MATCH THE HASHES, когда скачанный пакет отличается от закреплённого хеша.
Ошибка контрольной суммы в архиве ZIP, RAR или 7z
Форматы архивов хранят CRC-32 исходного содержимого каждого файла. При распаковке программа вычисляет его заново; WinRAR сообщает о несовпадении как Checksum error, а 7-Zip как CRC Failed. У зашифрованного архива неверный пароль даёт то же сообщение, потому что с неверным паролем расшифровывается мусор. Скачай архив заново, убедись, что все части разбитого архива (.part1.rar, .part2.rar) на месте и взяты из одной и той же загрузки, и введи пароль ещё раз. Команда восстановления архива в WinRAR лучше всего работает с архивами, созданными с информацией для восстановления, а параметр «Оставить повреждённые файлы» (Keep broken files) сохраняет всё, что распаковалось правильно.
Ошибки контрольной суммы в играх и сетевых инструментах
Игры сравнивают контрольные суммы своих файлов, поэтому частичное обновление или изменённый файл не проходит проверку. В Steam функция «Проверить целостность файлов игры» заново скачивает каждый файл, контрольная сумма которого не совпадает. В Wireshark предупреждения о контрольной сумме у пакетов, которые отправляет твой собственный компьютер, обычно не настоящие ошибки: сетевая карта вписывает контрольную сумму уже после того, как Wireshark перехватил пакет.
Частые заблуждения
- «Совпавшая контрольная сумма доказывает, что файл безопасен». Она доказывает, что файл совпадает с опубликованным значением. Если злоумышленник контролирует сайт, он может изменить и то и другое, поэтому проекты ещё и подписывают файлы с контрольными суммами ключом.
- «Контрольная сумма может исправить повреждённый файл». Она только обнаруживает повреждение. Исправление в том, чтобы получить хорошую копию.
- «Контрольная сумма и хеш это разные вещи». Контрольная сумма описывает задачу; хеш-функция вроде SHA-256 это один из инструментов, который может её решать.
Что читать дальше
Вычисли значения MD5, SHA-1 и SHA-256 для любого текста в генераторе хешей. Контрольные суммы работают с сырыми данными, поэтому страницы что такое байт и что такое бит объясняют, что именно складывается. База данных использует контрольные суммы страниц, чтобы ловить повреждения на диске, а визуализация хеш-таблицы показывает ещё одно применение короткого значения, вычисленного по данным.
Часто задаваемые вопросы
SHA-256 это контрольная сумма?
Как исправить ошибку контрольной суммы?
Из-за чего возникает ошибка контрольной суммы?
Зачем нужна контрольная сумма?
Как вычислить контрольную сумму файла?
sha256sum file в Linux, shasum -a 256 file в macOS или Get-FileHash file в Windows PowerShell. В Python hashlib.sha256(data).hexdigest() даёт контрольную сумму SHA-256, а zlib.crc32(data) даёт CRC-32.