使用Werkzeug加密密码,如何非切片获取pbkdf2:sha256:600000后的内容
如何获取Werkzeug加密密码时前缀后的哈希内容?
Werkzeug的generate_password_hash方法返回的完整哈希串包含算法、迭代次数等元信息,这是为了方便后续用check_password_hash直接验证。如果不想通过字符串切片提取前缀后的内容,可以直接调用Werkzeug的底层方法手动生成:
- 用
werkzeug.security.gen_salt生成和默认逻辑一致的随机盐 - 用
werkzeug.security.pbkdf2_hex计算PBKDF2哈希值 - 拼接盐与哈希值,得到目标结果
示例代码:
import werkzeug # 生成8位长度的盐(与generate_password_hash的salt_length参数对应) salt = werkzeug.security.gen_salt(8) # 计算PBKDF2-SHA256哈希,迭代次数保持600000(Werkzeug默认值) hash_str = werkzeug.security.pbkdf2_hex( password="123456", salt=salt, iterations=600000, method="sha256" ) # 拼接盐和哈希值,得到前缀后的内容 target_result = f"{salt}${hash_str}" print(target_result)
说明
gen_salt是Werkzeug内部用于生成盐的方法,生成的是URL安全的Base64编码字符串,和generate_password_hash使用的盐格式完全一致- 手动生成的结果和原输出中
pbkdf2:sha256:600000$之后的内容结构完全相同 - 如果后续需要验证密码,需自行保存盐和哈希值,验证时用相同参数重新计算输入密码的哈希并对比;若无需特殊处理,更推荐保留完整前缀串,直接用
check_password_hash完成验证,更简洁可靠
内容的提问来源于stack exchange,提问作者Parth Pawar
相关产品推荐
相关产品推荐

