Files
DjangoAdmin_Flask_EleVue/utils/password.py
T
DjangoAdmin DevandClaude 15f2a5e097 chore: 基线提交(重构前代码快照)
- git 初始化 + .gitignore 补全(根 .env / logs / instance / __pycache__ 等)
- 修复 utils/.gitignore 误将整个 utils/ 源码层忽略的问题,补入全部工具源码(含 ip2region.xdb)
- 含后端全部代码:application / extensions / utils / config / migrations
- 含前端 ui/(后续整体迁走)
- 不含根 .env(含密钥,本地保留)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-07 12:12:06 +08:00

73 lines
1.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
密码加密工具模块
=============================================================
该模块提供基于 bcrypt 的密码加密和验证功能。
采用 bcrypt(password + salt) 方案,bcrypt 内置盐与外部 salt 双重加盐,
确保相同密码产生不同哈希,有效抵御彩虹表攻击。
主要功能:
1. 生成随机盐值(generate_salt)
2. 密码加密(encrypt_password)- bcrypt(password + salt)
3. 密码验证(verify_password)
所属包: utils
所在文件: utils/password.py
依赖模块: bcrypt - 密码哈希第三方库
secrets - 安全随机数生成模块
"""
import secrets
import bcrypt
# bcrypt 工作因子,值越大计算越慢越安全,默认12(约250ms)
BCRYPT_ROUNDS = 12
def generate_salt(length: int = 10) -> str:
"""
生成随机盐值
Args:
length: 盐值长度,默认10位
Returns:
str: 随机盐值字符串
"""
return secrets.token_urlsafe(length)[:length]
def encrypt_password(password: str, salt: str) -> str:
"""
使用 bcrypt 加密密码
将密码与外部 salt 拼接后进行 bcrypt 哈希,实现双重加盐。
Args:
password: 明文密码
salt: 外部盐值
Returns:
str: bcrypt 哈希字符串(60字符)
"""
combined = (password + salt).encode('utf-8')
hashed = bcrypt.hashpw(combined, bcrypt.gensalt(rounds=BCRYPT_ROUNDS))
return hashed.decode('utf-8')
def verify_password(password: str, salt: str, hashed: str) -> bool:
"""
验证密码是否正确
Args:
password: 待验证的明文密码
salt: 外部盐值
hashed: 存储的 bcrypt 哈希值
Returns:
bool: 密码是否匹配
"""
combined = (password + salt).encode('utf-8')
return bcrypt.checkpw(combined, hashed.encode('utf-8'))