Почему тест и извлечение не возвращают ошибку?
Потому что zip-файл, безусловно, в порядке. Zip-формат использует CRC-32 для обнаружения повреждений, и очень маловероятно, чтобы случайно измененный файл прошел этот тест.
По этой причине я думаю, что это старая контрольная сумма, что не так. Это было ошибочно рассчитано несколько лет назад.
Что может вызвать это?
Возможно, вы столкнулись с ошибкой программного обеспечения. Подумайте, могут быть ошибки, которые проявляются только в определенных обстоятельствах. С другой стороны, вычисление контрольной суммы относительно просто. Мы не можем исключить это, но я бы предпочел обвинить что-то еще.
Космический луч. Или что-то еще, что сделало один бит в вашей оперативной памяти, изменить его состояние. Это был не последний бит контрольной суммы, так как две контрольные суммы различаются по многим битам. Я думаю, что немного перевернулся до или во время расчета, несколько операций были выполнены позже, и это единственное изменение повлияло на весь результат. Я вижу md5
на вашем скриншоте, думаю, ваша контрольная сумма - MD5. Это хеш-функция; такие функции специально создаются (то есть определяются, выбираются) таким образом, что при переключении одного бита в заданную входную половину (в среднем) выходных битов также происходит изменение. Бит, который перевернулся, возможно, не был входным битом, это мог быть некоторый прерывистый бит; Тем не менее, неудивительно, что две суммы очень разные.
Я упомянул космические лучи, но также возможно, что ваша память не была надежной на 100% и слегка перевернута без внешней причины.
Эти вещи случаются. Несколько примеров:
Этот автор пишет об исполняемом файле, который начал генерировать ошибки. Оказалось, что файл в кеше (RAM) буквально немного отличается от того же файла на диске.
Использование ошибок памяти для атаки на виртуальную машину. Авторы Sudhakar Govindavajhala и Andrew W. Appel.
Наша атака работает, посылая в JVM [Java Virtual Machine] Java-программу, которая разработана таким образом, что практически любая ошибка памяти в ее адресном пространстве позволяет ей контролировать JVM. Все обычные виртуальные машины Java и .NET уязвимы для этой атаки.
Артем Динабург зарегистрировал доменные имена, несколько отличающиеся от разных популярных доменов. Устройства со всего мира посетили эти адреса.