需要帮助验证 Python 加密库的签名
Need help verifying a signature with the Python Cryptography library
我正在尝试使用 Python 加密库验证签名,如前所述
这里 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。根据密码学规范,如果 verifier.verify() 失败,它看起来像是 returns 异常,所以我不知道如何测试它。
verify
引发异常或 returns None
。因此,此代码
if verifier.verify():
return 1
else:
return 0
将始终 return 0,即使实际上已通过验证检查。你是正确的,使用 verify
的正确方法是将它包装在一个 try 块中,并在失败时处理 InvalidSignature
异常。
我正在尝试使用 Python 加密库验证签名,如前所述
这里 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。根据密码学规范,如果 verifier.verify() 失败,它看起来像是 returns 异常,所以我不知道如何测试它。
verify
引发异常或 returns None
。因此,此代码
if verifier.verify():
return 1
else:
return 0
将始终 return 0,即使实际上已通过验证检查。你是正确的,使用 verify
的正确方法是将它包装在一个 try 块中,并在失败时处理 InvalidSignature
异常。