如何在Python中生成PBKDF2格式密码哈希以修改users.json?
用Python生成PBKDF2格式密码字符串以修改users.json
你给出的密码格式是PBKDF2哈希的常见表示方式,结构为:pbkdf2:<迭代次数>:<十六进制盐值>:<十六进制哈希值>
从示例字符串来看,该软件使用的是PBKDF2-HMAC-SHA256(哈希值长度为64字节,对应SHA-256输出),迭代次数为10000,盐值长度为16字节。
生成符合格式的密码字符串
直接用Python标准库的hashlib和os模块即可实现,无需额外依赖:
import hashlib import os def generate_pbkdf2_password(password: str, iterations: int = 10000) -> str: # 生成16字节随机盐值 salt = os.urandom(16) # 计算PBKDF2-HMAC-SHA256哈希 dk = hashlib.pbkdf2_hmac( 'sha256', password.encode('utf-8'), salt, iterations ) # 拼接成指定格式字符串 return f"pbkdf2:{iterations}:{salt.hex()}:{dk.hex()}" # 示例:生成新密码"new_pass123"的PBKDF2格式字符串 new_pwd_str = generate_pbkdf2_password("new_pass123") print(new_pwd_str)
修改users.json的示例代码
生成密码字符串后,可按以下流程修改用户数据库:
import json # 读取users.json文件 with open('users.json', 'r', encoding='utf-8') as f: users = json.load(f) # 定位目标用户并更新密码(假设通过username字段识别) target_user = "your_target_username" for user in users: if user.get('username') == target_user: user['password'] = generate_pbkdf2_password("new_pass123") break # 写入修改后的内容 with open('users.json', 'w', encoding='utf-8') as f: json.dump(users, f, indent=2, ensure_ascii=False)
注意事项
- 必须保持迭代次数与原密码字符串一致(示例中为10000),否则软件无法验证密码有效性
- 盐值需随机生成,禁止重复使用固定盐值,避免彩虹表攻击
- 密码需以UTF-8编码传入哈希计算
内容的提问来源于stack exchange,提问作者RubenLaguna
相关产品推荐
相关产品推荐

