Python PyCryptodome 数字签名算法与 DSS

问题描述 投票:0回答:1

in Python Pycryptodome default example for DSA-DSS 大家好。我问了这个问题,但是,这并不聪明,我删除了我的个人资料,只是从我朋友的帐户中询问。

问题是.我尝试使用公钥加密、签名、验证,所以..

明天一切顺利,但我遇到了 DSA-DSS ECDSA。如果你看图片,我认为我针对它存在一些问题。他们在 DSS 中使用私钥创建“签名者”,但他们不在签名中使用它。相反,它使用密钥符号。即使在验证级别,(图中没有出现)他们从“PEM”文件调用公钥并尝试验证而不再次调用 DSS new()..

因此,如果您比较我的代码和图片,那么您实际上会注意到我想说的......

from Crypto.PublicKey import DSA
from Crypto.Signature import DSS
from Crypto.Hash import SHA256
key = DSA.generate(2048)
publickey=key.publickey()
message = b"Hello"
hash_obj = SHA256.new(message)
signer = DSS.new(key, 'fips-186-3')
signature = signer.sign(hash_obj)

所以在这里我尝试验证消息..我没有再次创建对象,并且我从上面显示的密钥中调用了公钥。

pkey=DSS.new(publickey,'fips-186-3')
pkey.verify(hash_obj,signature)
False

正如你所看到的,我得到了“False”。我在 ECDSA 上尝试过 - DSS 再次返回了同样的结果。 所以如果你得到了我想要做的事情,请帮忙,我想要做什么?

python-3.x cryptography pycryptodome dsa
1个回答
1
投票

verify

方法的
文档说:

引发: ValueError – 如果签名不真实

如果成功,它总是返回

False

因此,您需要检查方法是否引发异常,而不是检查返回值。

一般来说,你会想要这样的东西:

try:
    pkey.verify(hash_obj,signature)
    valid = True
except ValueError:
    valid = False

在您的代码中,它没有引发异常表明验证已成功并且签名实际上是有效的。

© www.soinside.com 2019 - 2024. All rights reserved.