【问题标题】:Need help verifying a signature with the Python Cryptography library需要帮助使用 Python Cryptography 库验证签名
【发布时间】:2017-01-17 02:04:07
【问题描述】:

我正在尝试使用 Python Cryptography 库验证签名,如所述 这里https://cryptography.io/en/latest/hazmat/primitives/asymmetric/rsa/

这是在客户端-服务器 TCP 聊天应用程序的上下文中,客户端已计算签名,并将其发送给客户端以验证它确实是正确的服务器。签名被传递给函数进行验证。

def VerifySignature(signature):
    with open("server_publickey.pem", "rb") as key_file:
        public_key = serialization.load_pem_public_key(
            key_file.read(),
            #password=None,
            backend=default_backend()
        )
        verifier = public_key.verifier(
            signature,
            padding.PSS(
                mgf=padding.MGF1(hashes.SHA256()),
                salt_length=padding.PSS.MAX_LENGTH
            ),
            hashes.SHA256()
        )

        message = b"the message that the server verified"
        verifier.update(message)
        if verifier.verify():
            return 1
        else:
            return 0

我注意到正在返回 0。根据 Cryptography 规范,看起来如果 verifier.verify() 失败它会返回一个异常,所以我不知道如何测试它。

【问题讨论】:

  • 显然,唯一的测试方法是将其放入 try except 块中。如果失败,它会引发异常,否则你很高兴?

标签: python python-3.x rsa digital-signature python-cryptography


【解决方案1】:

verify 引发异常或返回None。因此,这段代码

if verifier.verify():
    return 1
else:
    return 0

即使实际上验证检查已通过,也将始终返回 0。您是正确的,使用verify 的正确方法是将其包装在try 块中并在失败时处理InvalidSignature 异常。

【讨论】:

    猜你喜欢
    • 2011-09-16
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 2013-10-09
    • 1970-01-01
    相关资源
    最近更新 更多