是否有任何空值来欺骗 Python hashlib?

问题描述

所以我正在研究 Python FastAPI 项目。 我目前的目标是正确验证密码,因此正确的密码应该触发 HTTP 204 响应代码,在其他情况下(也是空参数)应该触发 HTTP 401。

示例如下:

这里的响应应该是:204

/auth?password=haslo&password_hash=013c6889f799cd986a735118e1888727d1435f7f623d05d58c61bf2cd8b49ac90105e5786ceaabd62bbc27336153d0d316b2d13b36804080c44aa6198c533215

这里是:401

/auth?password=haslo&password_hash=f34ad4b3ae1e2cf33092e2abb60dc0444781c15d0e2e9ecdb37e4b14176a0164027b05900e09fa0f61a1882e0b89fbfa5dcfcc9765dd2ca4377e2c794837e091

我正确处理了 RequestValidationError,我的散列密码验证如下所示:

class AuthResponse(BaseModel):
    status_code: int

@app.get("/auth",response_model=AuthResponse)
async def auth(password: str,password_hash: str,response: Response):
    try:
        m = hashlib.sha512(bytes(password,encoding="ASCII"))
        if str(m.hexdigest()) == password_hash:
            response.status_code = 204
        else:
            response.status_code = 401
    except Exception:
        response.status_code = 401
    return AuthResponse(status_code=response.status_code)

现在我想不出任何会触发错误验证的传递参数(传递 204 代码而不是 401),但似乎有可能,作为外部断言显示。我知道它一定是关于 None 以外的空值,但我自己无法弄清楚。

我已经尝试过以下模式:

/auth?password=&password_hash=

/auth?password=%00&password_hash=%00

http://127.0.0.1:8000/auth?password=%0&password_hash=%0

我非常感谢您的帮助、提示或建议。

解决方法

谢谢大家,这只是一个编码练习项目,很多东西可能会有点偏差。但碰巧我没有检查创建有效哈希的空密码参数,但根据任务不正确。