Что такое хеш

Хеш-функция превращает данные любого размера в короткую строку фиксированной длины — цифровой отпечаток.
Хеш — это как отпечаток пальца для данных: уникальный, короткий и не позволяющий восстановить самого человека.

Чем хеш отличается от шифрования

Важная мысль: хеширование — это не шифрование. У шифрования есть обратная операция (расшифровка), а хеш необратим — по отпечатку нельзя восстановить исходные данные. И ключа у хеш-функции нет.

Считаем хеш на Python

В стандартной библиотеке есть модуль hashlib. Посчитаем SHA-256 — один из самых популярных алгоритмов:

import hashlib

data = "Привет, мир!"
digest = hashlib.sha256(data.encode("utf-8")).hexdigest()
print("Сообщение:", data)
print("SHA-256:", digest)
print("Длина хеша:", len(digest), "hex-символов")

Вывод:

Сообщение: Привет, мир!
SHA-256: 8e4...очень длинная строка...f2c
Длина хеша: 64 hex-символа

Главные свойства хеш-функции

ДетерминированностьОдни и те же данные всегда дают один и тот же хеш.
Фиксированная длинаХоть слово, хоть целая книга — SHA-256 всегда выдаёт 256 бит (64 hex-символа).
НеобратимостьПо хешу нельзя восстановить исходные данные.
Стойкость к коллизиямОчень трудно найти два разных сообщения с одинаковым хешем.

Проверяем фиксированную длину

Сравним хеши очень короткого и очень длинного текста — длина результата одинаковая:

import hashlib

short = "a"
long = "a" * 100000  # сто тысяч букв

h1 = hashlib.sha256(short.encode()).hexdigest()
h2 = hashlib.sha256(long.encode()).hexdigest()

print("Длина хеша короткого:", len(h1))
print("Длина хеша длинного:", len(h2))
print("Хеши разные:", h1 != h2)

Вывод:

Длина хеша короткого: 64
Длина хеша длинного: 64
Хеши разные: True

Один символ и сто тысяч символов дали хеши одинаковой длины, но совершенно разные по содержанию. Это и есть суть хеш-функции: любой объём данных сжимается до отпечатка фиксированного размера.

Где используются хеши

  • Проверка, что файл скачался без повреждений.
  • Хранение паролей (об этом будет отдельный урок).
  • Цифровые подписи и блокчейн.
  • Быстрый поиск данных (хеш-таблицы).
Проверьте себя
1. Какое свойство отличает хеш-функцию от шифрования?
AХеш можно расшифровать обратно ключом
BХеш необратим — по отпечатку нельзя восстановить исходные данные
CХеш всегда длиннее исходных данных
DХеш зависит от секретного ключа
2. Что выдаст SHA-256 для текста в одну букву и для текста в миллион букв?
AХеши разной длины
BХеши одинаковой длины (64 hex-символа)
CОшибку для длинного текста
DОдинаковые хеши
Поддержать проект