Решён
Чем хеширование отличается от сериализации?

Night Coder Алгоритмы
2.9k
3

Изучаю бэкенд, постоянно встречаю оба термина и путаюсь.

Хеширование это когда из данных делают короткую строку фиксированной длины, типа MD5 или SHA. Сериализация это когда объект превращают в строку или байты для передачи.

Но в обоих случаях на входе данные, на выходе что то другое. В чем принципиальная разница? Когда что использовать?

Решение
47
Эксперт • 2 ответа

Ключевое различие в обратимости.

Сериализация - двусторонний процесс. Берешь объект, превращаешь в JSON/XML/protobuf, передаешь куда надо, на другом конце десериализуешь обратно в точно такой же объект. Ничего не теряется.

import json

obj = {"name": "Ivan", "age": 25}
serialized = json.dumps(obj)  # '{"name": "Ivan", "age": 25}'
original = json.loads(serialized)  # {"name": "Ivan", "age": 25}

Хеширование - односторонний процесс. Берешь данные любого размера, получаешь строку фиксированной длины. Восстановить исходные данные из хеша невозможно (если хеш криптостойкий). Плюс разные входные данные могут дать одинаковый хеш (коллизии).

import hashlib

data = "любой текст любой длины"
hash_value = hashlib.sha256(data.encode()).hexdigest()
# '3a7bd3e2...' - всегда 64 символа для SHA-256
# из этой строки исходный текст не восстановить

Когда что:

  • Сериализация: передача данных между сервисами, сохранение состояния, кеширование объектов
  • Хеширование: хранение паролей, проверка целостности файлов, дедупликация, хеш-таблицы
Аватар Night Coder

Спасибо, теперь понятно. Обратимость - вот ключевое слово которое я искал

88
Участник • 1 ответ

Если совсем просто: сериализация это упаковка чемодана, хеширование это взвешивание чемодана. Из упакованного чемодана можно достать вещи обратно. Из цифры на весах чемодан не восстановишь.

22
Участник • 4 ответа

Добавлю практический нюанс который часто упускают.

Сериализованные данные надо защищать, там лежит вся информация как есть. Если перехватят JSON с юзером, увидят все поля.

Хеш можно хранить открыто. Даже если злоумышленник получит хеш пароля, ему придется брутфорсить чтобы подобрать исходный пароль (при условии что хеш нормальный, не MD5).

Написать ответ

Премодерация гостей

Вы отвечаете как гость. Ваш ответ будет скрыт до проверки модератором. Чтобы ответ появился сразу и вы получали репутацию — войдите в аккаунт.

Будьте вежливы и соблюдайте правила платформы.