You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:24:01