Сравнивайте содержимое, а не название
Хеш-функция получает последовательность байтов и вычисляет значение фиксированной длины. SHA-256 даёт 256-битный результат; в шестнадцатеричной записи это 64 символа. Для одних и тех же входных байтов алгоритм возвращает один и тот же результат. Изменение содержимого обычно приводит к совершенно другой строке. Представим два файла с названием plan.txt в разных папках. В первом записано «встреча в среду», во втором — «встреча в пятницу». Одинаковое имя не делает их содержимое одинаковым. И наоборот, переименование файла без изменения его байтов не меняет хеш, вычисленный только по содержимому. Поэтому в журнале проверки отдельно сохраняют путь, алгоритм и полученное значение: это разные сведения.
Зафиксируйте одинаковые условия чтения
В Python модуль hashlib позволяет создать объект SHA-256, передавать ему байты через update и получать шестнадцатеричную строку методом hexdigest. Файл для побайтовой проверки открывают в бинарном режиме. Большой файл можно читать частями: последовательные вызовы update учитывают объединённое содержимое в том же порядке. В собственном учебном скрипте разделите три действия: чтение файла, вычисление значения и сравнение с эталоном. Ошибка чтения должна давать понятное сообщение, а не результат «совпало». Для первого опыта выберите небольшой неподвижный файл. Если другой процесс меняет его во время чтения, итог проверки становится сложнее интерпретировать. Перенос строки, кодировка и невидимый пробел тоже относятся к байтам; визуально похожие тексты могут различаться.
Не расширяйте вывод за пределы проверки
Несовпадение с надёжным эталоном означает, что проверяемые данные не совпали с ожидаемыми. Причиной может быть обычное редактирование, ошибка копирования или нежелательное изменение. Сам хеш не рассказывает, кто изменил файл и почему. Совпадение SHA-256 даёт сильное практическое свидетельство совпадения данных, но не является проверкой на вредоносность. Особенно важно происхождение эталона. Если неизвестный отправитель прислал файл вместе с его хешем, оба могли быть подготовлены одним человеком. Их согласованность не подтверждает доверие к отправителю. Например, Марина сохраняет контрольную сумму своей утверждённой инструкции отдельно от рабочей копии. После редактирования сравнение помогает заметить расхождение версий. Если же она перезаписывает эталон при каждом запуске, прежняя точка сравнения исчезает и задача контроля изменений не решается.
Попробуйте на практике
Составьте и проверьте план локального опыта с собственным небольшим текстовым файлом.
- Создайте файл с вымышленной заметкой и запишите его точный путь. Выберите SHA-256 и сохраните первоначальный результат отдельно, используя собственный локальный скрипт на hashlib.
- Повторите вычисление без редактирования. Запишите, совпали ли значения, и убедитесь, что сравниваете полные строки одного алгоритма.
- Измените одно слово, сохраните файл и вычислите значение снова. Зафиксируйте различие, не заменяя первоначальный эталон.
- Переименуйте изменённый файл и повторите вычисление по новому пути. Сравните его с результатом предыдущего шага и объясните, почему название и содержимое проверяются отдельно.
Как проверить результат. Без изменения байтов результаты совпадают; после изменения слова ожидается другой хеш; простое переименование сохраняет хеш содержимого. В выводе должны быть указаны условия опыта и граница результата: проверка обнаруживает расхождение данных, но не устанавливает автора изменения и безопасность файла.
Частые вопросы
Можно ли восстановить потерянный файл по его хешу?
Нет. Контрольная сумма не является резервной копией и не хранит содержимое в обратимо закодированном виде. Для восстановления нужна отдельная копия данных.
Хеширование заменяет защиту доступа?
Нет. Оно само по себе не запрещает чтение, изменение или удаление файла. Сохранность эталона, права доступа и резервное копирование решают другие задачи и требуют отдельного подхода.
Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.