hashlib — Безопасные хеши и дайджесты сообщений
Модуль реализует общий интерфейс для множества алгоритмов хеширования (SHA1, SHA256, MD5 и т.д.).
import hashlib
Базовое хеширование
Данные для хеширования должны передаваться в виде байт (bytes), а не обычных строк.
import hashlib
# 1. Выбор алгоритма
m = hashlib.sha256()
# 2. Добавление данных
m.update(b"Hello")
m.update(" World".encode('utf-8'))
# 3. Результат
print(m.hexdigest()) # Шестнадцатеричная строка (самый частый вариант)
Компактная запись:
hash_str = hashlib.sha256("Текстовые данные".encode('utf-8')).hexdigest()
Хеширование файлов (без перегрузки памяти)
Для больших файлов нужно обновлять хеш порциями (чанками):
import hashlib
def get_file_hash(filename):
h = hashlib.sha256()
with open(filename, 'rb') as file:
chunk = 0
while chunk != b'':
# Читаем по 4 КБ
chunk = file.read(4096)
h.update(chunk)
return h.hexdigest()
print(get_file_hash("large_file.zip"))
Хеширование паролей
Обычного SHA-256 недостаточно для паролей. Используйте генерацию ключей (PBKDF2):
import hashlib
import os
password = b"my_password123"
salt = os.urandom(32) # Уникальная соль для каждого пользователя
# PBKDF2 с SHA256 и 100 000 итераций
hashed_key = hashlib.pbkdf2_hmac('sha256', password, salt, 100000)
print(hashed_key.hex())
Примечание: Для промышленных решений управления паролями лучше использовать сторонние пакеты, например
bcryptилиargon2-cffi, либо стандартныйsecrets.
Официальная документация
hashlib — Secure hashes and message digests
Полный справочник API (API Reference)
Алгоритмы хеширования
| Функция | Описание |
|---|---|
hashlib.sha256([data]) |
Создает объект алгоритма SHA-256 (самый рекомендуемый стандарт). Если передана строка в виде bytes, инициализирует ей. |
hashlib.md5([data]) |
Создает объект устаревшего MD5-алгоритма. |
hashlib.new(name) |
Общий конструктор. Принимает имя алгоритма строкой, например 'sha1'. |
Методы объекта хеша
| Метод | Описание |
|---|---|
hash.update(data) |
Добавляет порцию новых байтовых данных к хешу (меняет внутреннее состояние). |
hash.digest() |
Возвращает готовый хеш в формате объекта bytes. |
hash.hexdigest() |
Возвращает готовый хеш в формате шестнадцатеричной строки str (состоит только из английских букв от a до f и цифр от 0 до 9). |
Ключи и защита паролей
| Функция | Описание |
|---|---|
hashlib.pbkdf2_hmac(name, pwd, salt, iter) |
Мощная функция вычисления стойкого хеша для пароля на основе алгоритма вывода ключей PBKDF2. |