如何让py-scrypt的"简易密码验证器"示例函数正常运行?
修复py-scrypt密码验证器示例函数
我来帮你把这个密码验证器的示例修正常!先梳理下你现有代码的问题,再给你完整的可运行版本:
现有代码的核心问题
verify2_password函数没写完,scrypt.decrypt的参数不完整,而且完全没处理密码错误的情况- 虽然你用
os.urandom生成随机数据的思路是对的,但验证逻辑缺失,没法判断密码是否正确
完整可运行的修正代码
#!/usr/bin/python3 # -*- coding: utf-8 -*- import scrypt import os def hash2_password(password, maxtime=0.5, datalength=64): # 生成随机数据作为加密载体,验证时只需要能解密成功即可,不需要真实秘密消息 random_data = os.urandom(datalength) return scrypt.encrypt(random_data, password, maxtime=maxtime) def verify2_password(encrypted_data, password, maxtime=0.5): try: # 尝试解密,能成功解密就说明密码匹配 scrypt.decrypt(encrypted_data, password, maxtime=maxtime) return True except scrypt.error: # 解密失败(密码错误或数据被篡改),直接返回验证失败 return False # 测试用例,直接运行就能看到效果 if __name__ == "__main__": test_pwd = "my_strong_pwd_123" # 生成用于验证的加密数据(注册时存到数据库) stored_data = hash2_password(test_pwd) print("生成的验证数据:", stored_data) # 验证正确密码 print("正确密码验证结果:", verify2_password(stored_data, test_pwd)) # 输出True # 验证错误密码 print("错误密码验证结果:", verify2_password(stored_data, "wrong_pwd")) # 输出False
关键修改说明
- 调整了
hash2_password的参数顺序,把password放在第一位,更符合密码哈希工具的常规使用习惯 - 补全了
verify2_password的完整逻辑:通过捕获scrypt.error异常来判断密码是否正确——解密成功返回True,失败返回False - 加了测试代码,你直接运行脚本就能看到验证效果
这个验证器的工作逻辑很清晰:用户注册时,调用hash2_password生成加密数据并存储;登录时取出存储的数据,用verify2_password验证用户输入的密码是否匹配。
内容的提问来源于stack exchange,提问作者Sun Bear
相关产品推荐
相关产品推荐

