下面是我的Java代码,它成功地验证了签名,不出所料。
Signature sig = Signature.getInstance("RSASSA-PSS");
PSSParameterSpec pssParams = new PSSParameterSpec(
"SHA-256",
"MGF1",
new MGF1ParameterSpec("SHA-1"),
MessageDigest.getInstance("SHA-256").getDigestLength(),
PSSParameterSpec.TRAILER_FIELD_BC
);
sig.setParameter(pssParams);
sig.initVerify(publicKey);
sig.update(plaintext.getBytes());
System.out.println(sig.verify(signatureBytes) ? "good" : "bad");完整的代码(包括导入、密钥、消息和签名)可以在https://pastebin.com/PmhGDaPv上看到,以防您想要重现该问题。
我的Python代码并没有像预期的那样验证签名:
hash = Hash.SHA256.new(message.encode("ascii"))
verifier = pss.new(key, mask_func=lambda x, y: pss.MGF1(x, y, Hash.SHA1), salt_bytes=Hash.SHA256.digest_size)
if verifier.verify(hash, signatureBytes):
print("good")
else:
print("bad")完整的代码(包括导入、密钥、消息和签名)可以在https://pastebin.com/f5iW4Xdg上看到,以防您想要重现该问题。
因此,在这两个代码中,散列是SHA256,而MGF1散列是SHA1。且盐长度等于SHA256的摘要长度。密钥和签名似乎也是一样的。有什么事吗?
发布于 2021-01-31 15:46:46
Crypto.Signature.pss.PSS_SigScheme#verify()不会以True/False的形式返回验证结果,但如果验证失败,则会抛出ValueError异常,即将if语句替换为:
try:
verifier.verify(hash, signatureBytes)
print("Signature authentic")
except (ValueError):
print("Signature not authentic")通过此更改,验证成功。在您发布的代码中,verify()返回一个None,因此即使验证成功也会执行else-branch。
https://stackoverflow.com/questions/65976176
复制相似问题