Что такое хеш-функция в программировании?

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

Ответ

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

Ключевые свойства:

  1. Детерминированность: Одинаковый вход всегда даёт одинаковый хеш.
  2. Эффективность: Вычисление хеша должно быть быстрым.
  3. Устойчивость к коллизиям: Крайне мала вероятность, что разные входные данные дадут одинаковый хеш.
  4. Необратимость (для криптографических): По хешу невозможно восстановить исходные данные.

Применение:

  • Структуры данных: Быстрый поиск в хеш-таблицах (словарях).
  • Целостность данных: Проверка неизменности файлов (контрольные суммы).
  • Безопасность: Хеширование паролей (с солью).

Пример на Swift:

// Использование протокола Hashable для структур
struct User: Hashable {
    let id: UUID
    let name: String
}

let user1 = User(id: UUID(), name: "Alice")
let user2 = User(id: UUID(), name: "Bob")

print(user1.hashValue) // Уникальный хеш, основанный на id и name

// Криптографическое хеширование с помощью CryptoKit
import CryptoKit

let data = Data("SecretData".utf8)
let hash = SHA256.hash(data: data) // SHA256Digest
print(hash.description) // Например: SHA256 digest: 4a6838...

Тип, соответствующий протоколу Hashable, может быть ключом в Dictionary или элементом в Set.