Модуль хеширования паролей¶
Модуль password_hasher предоставляет реализацию интерфейса IPasswordHasher для безопасного хеширования и проверки паролей с использованием алгоритма Argon2.
UserPasswordHasher¶
Реализация хешера паролей на основе Argon2. Argon2 — это победитель конкурса Password Hashing Competition 2015 года, обеспечивающий защиту от атак перебором и использованием специализированного оборудования.
Особенности¶
- Использует современный и безопасный алгоритм Argon2
- Автоматически генерирует соль (salt) для каждого пароля
- Поддерживает настройку параметров вычислительной сложности
- Реализует интерфейс
IPasswordHasher
Детали реализации¶
Bases: IPasswordHasher
Рабочий хешер паролей пользователей с использованием Argon2.
Source code in src/adapters/password_hasher.py
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | |
hash_password(password: str) -> str
¶
Создает безопасный хеш для указанного пароля.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
password
|
str
|
Пароль в открытом виде. |
required |
Returns:
| Type | Description |
|---|---|
str
|
Хешированное значение пароля. |
Source code in src/adapters/password_hasher.py
22 23 24 25 26 27 28 29 30 31 32 | |
verify_password(password: str, hashed_password: str) -> bool
¶
Проверяет соответствие пароля и его хеша.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
password
|
str
|
Оригинальный пароль в открытом виде. |
required |
hashed_password
|
str
|
Хеш пароля для проверки. |
required |
Returns:
| Type | Description |
|---|---|
bool
|
True, если пароль совпадает, иначе False. |
Source code in src/adapters/password_hasher.py
9 10 11 12 13 14 15 16 17 18 19 20 | |
Примеры использования¶
Автоматически генерирует соль (salt) для каждого пароля
- Поддерживает настройку параметров вычислительной сложности
- Реализует интерфейс IPasswordHasher
Детали реализации¶
Bases: IPasswordHasher
Рабочий хешер паролей пользователей с использованием Argon2.
Source code in src/adapters/password_hasher.py
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | |
hash_password(password: str) -> str
¶
Создает безопасный хеш для указанного пароля.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
password
|
str
|
Пароль в открытом виде. |
required |
Returns:
| Type | Description |
|---|---|
str
|
Хешированное значение пароля. |
Source code in src/adapters/password_hasher.py
22 23 24 25 26 27 28 29 30 31 32 | |
verify_password(password: str, hashed_password: str) -> bool
¶
Проверяет соответствие пароля и его хеша.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
password
|
str
|
Оригинальный пароль в открытом виде. |
required |
hashed_password
|
str
|
Хеш пароля для проверки. |
required |
Returns:
| Type | Description |
|---|---|
bool
|
True, если пароль совпадает, иначе False. |
Source code in src/adapters/password_hasher.py
9 10 11 12 13 14 15 16 17 18 19 20 | |
Примеры использования¶
Создание и использование хешера¶
from src.adapters.password_hasher import UserPasswordHasher
# Создание экземпляра хешера
hasher = UserPasswordHasher()
# Хеширование пароля
hashed_password = hasher.hash_password("my_secure_password")
# Проверка пароля
is_valid = hasher.verify_password("my_secure_password", hashed_password) # Вернет True
Интеграция с пользовательской моделью¶
from dataclasses import dataclass
from src.adapters.password_hasher import UserPasswordHasher
hasher = UserPasswordHasher()
@dataclass
class User:
username: str
_hashed_password: str
def set_password(self, password: str) -> None:
self._hashed_password = hasher.hash_password(password)
def check_password(self, password: str) -> bool:
return hasher.verify_password(password, self._hashed_password)
Рекомендации¶
- Безопасность паролей
- Никогда не храните пароли в открытом виде
- Используйте длинные и сложные пароли
-
Регулярно обновляйте параметры хеширования
-
Производительность
- Настройте параметры сложности в соответствии с вашими требованиями
-
Учитывайте нагрузку на процессор при аутентификации большого числа пользователей
-
Миграции
- При смене алгоритма хеширования предусмотрите механизм обновления хешей
- Храните информацию о версии алгоритма хеширования
Примечания¶
- Текущая реализация использует настройки по умолчанию библиотеки
passlib - Для продакшн-среды рекомендуется настроить параметры сложности в соответствии с вашими требованиями безопасности