Можно ли восстановить исходные данные из хэш-значения?

«Можно ли восстановить исходные данные из хэш-значения?» — вопрос из категории Алгоритмы и структуры данных, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет. Хэш-функции проектируются как односторонние (one-way). Их цель — преобразовать произвольные данные в фиксированное значение (хэш) для быстрого сравнения или использования в качестве ключа в хэш-таблицах (например, Dictionary, Set). Обратное преобразование хэша в исходные данные невозможно.

Пример в Swift:

let data = "SecretPassword123"
let hash = data.hashValue // Получаем целочисленный хэш
// Нет функции: let original = String(fromHash: hash)

Почему это важно?

  • Эффективность: Хэширование быстрое и генерирует компактный результат.
  • Коллизии: Разные входные данные могут давать одинаковый хэш (хотя это маловероятно для хороших функций).
  • Безопасность: Криптографические хэш-функции (SHA-256) специально созданы для необратимости.

Если нужна обратимость: Используйте кодирование (например, JSONEncoder/JSONDecoder, PropertyListEncoder) или архивацию (NSKeyedArchiver), а не хэширование.