Что такое хеш
Хеш-функция превращает данные любого размера в короткую строку фиксированной длины — цифровой отпечаток.
Хеш — это как отпечаток пальца для данных: уникальный, короткий и не позволяющий восстановить самого человека.
Чем хеш отличается от шифрования
Важная мысль: хеширование — это не шифрование. У шифрования есть обратная операция (расшифровка), а хеш необратим — по отпечатку нельзя восстановить исходные данные. И ключа у хеш-функции нет.
Считаем хеш на 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Одинаковые хеши