Что такое хеш-функция, каковы её основные свойства и где она применяется?

Ответ

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

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

  • Детерминированность: Один и тот же входной набор данных всегда даёт одну и ту же хеш-сумму.
  • Высокая скорость вычисления: Хеш должен вычисляться быстро для любого набора данных.
  • Практическая необратимость (сопротивление прообразу): По имеющемуся хешу должно быть вычислительно невозможно восстановить исходные данные.
  • Сопротивление коллизиям: Должно быть вычислительно сложно найти два разных набора входных данных, которые приводили бы к одинаковой хеш-сумме (коллизии).

Применение в бэкенде:

  • Хранение паролей: Хранятся не сами пароли, а их хеши (часто с "солью" — случайными данными).
  • Проверка целостности данных: Для проверки того, что файл или сообщение не были изменены при передаче.
  • Кэширование: Хеш от запроса может использоваться как ключ для кэшированного ответа.
  • Структуры данных: Является основой для хеш-таблиц (в Go это map).

Пример использования sha256 в Go:

package main

import (
    "crypto/sha256"
    "fmt"
)

func main() {
    data := []byte("hello world")
    // Вычисляем хеш-сумму для наших данных
    hash := sha256.Sum256(data)

    // Выводим хеш в шестнадцатеричном формате
    fmt.Printf("%xn", hash)
    // Output: b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9
}