Ответ
Криптографическая хеш-функция — это математический алгоритм, который преобразует произвольный массив данных в строку фиксированной длины (хеш).
Ключевые свойства:
Детерминированность (Determinism): Один и тот же ввод всегда даёт один и тот же хеш.
Необратимость (Pre-image resistance): По известному хешу практически невозможно восстановить исходные данные. Это свойство критически важно для хранения паролей.
Стойкость к коллизиям (Collision resistance): Практически невозможно найти два разных набора входных данных, которые бы давали одинаковый хеш. Это важно для проверки целостности данных.
Лавинный эффект (Avalanche effect): Минимальное изменение во входных данных (например, одного бита) приводит к кардинальному, непредсказуемому изменению хеша.
Высокая скорость вычисления: Хеш должен вычисляться быстро для любого объёма данных.
Примеры использования в бэкенде:
- Хранение паролей: В базе данных хранятся не сами пароли, а их хеши (часто с "солью" — случайной строкой, уникальной для каждого пользователя).
- Проверка целостности данных: Для проверки того, что файл или сообщение не были изменены при передаче, можно сравнить хеш оригинала с хешем полученных данных.
- Ключи в структурах данных: Хеш-функции (не обязательно криптографические) лежат в основе
map
в Go для быстрого доступа к элементам. - Кэширование: Хеш от URL-адреса и параметров запроса может использоваться в качестве ключа для кэширования ответа.
- Цифровые подписи: Хеш документа подписывается приватным ключом для подтверждения авторства и неизменности.
Пример хеширования в Go (SHA-256):
package main
import (
"crypto/sha256"
"fmt"
)
func main() {
data := []byte("hello, backend!")
// Вычисляем хеш
hash := sha256.Sum256(data)
// Выводим хеш в виде шестнадцатеричной строки
fmt.Printf("%xn", hash)
}