python rsa 签名结果在不同的库中?

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

我的目标是让签名结果与服务器的结果一致。我听说签名可能涉及随机性,每次都会导致不同的结果,但在实践中,当我使用密码学库时:

signature = privateKey.sign(data, padding.PKCS1v15(), hashes.SHA256())

每次的结果都是一致的,并且与服务器的结果相匹配。我想简化导入,只使用 Crypto 或 cryptodome。使用带有以下代码的 cryptodome 时:

dataHash = SHA256.new(data)
signature = PKCS1_v1_5.new(privateKey).sign(dataHash)

结果每次都不同,可能是由于盐的原因。

我想问是否可以像 Crypto 或 cryptodome 中的密码学那样每次都生成相同的签名。谢谢!

python rsa digital-signature
1个回答
0
投票

每次使用 PyCryptodome 看到不同结果的原因是,默认情况下,它使用 PSS(概率签名方案)填充,出于安全原因,它引入了随机性。

使用

pkcs1_15.new(private_key).sign(hash_obj)
使用 PKCS#1 v1.5 填充对哈希进行签名,将产生一致的结果。

这里我们使用

Crypto.Signature.pkcs1_15
而不是
Crypto.Signature.PKCS1_v1_5
。 pkcs1_15 模块较新,推荐使用。 我们明确使用 PKCS#1 v1.5 填充,与 PSS 填充不同,它不会引入随机性。 使用
from Crypto.Signature import pkcs1_15

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