0

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

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

直到明天一切顺利,但我遇到了 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

如您所见,我得到了“错误”。我在 ECDSA 上尝试过 - DSS 再次返回了同样的结果。所以如果你有我想做的事,请帮忙,我想做什么?

4

1 回答 1

1

方法的文档verify说:

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

False如果成功,它总是返回。

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

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

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

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

于 2018-05-25T10:46:31.700 回答