gpt4 book ai didi

python - 如何在python中使用数字签名算法RSASSA-PSS-2048-SHA256

转载 作者:行者123 更新时间:2023-11-28 18:05:53 29 4
gpt4 key购买 nike

我正在尝试在 python2.7 中查找 RSASSA-PSS-2048-SHA256 数字签名算法。

目前我的代码是这样的:

def calc_rsassa_pss_2048_sha256(self, data):
private_key = RSA.importKey(self.private_key)
cipher = PKCS1_v1_5.new(private_key)
h = SHA.new(data)
signature = cipher.sign(h)
return base64.b64encode(signature)

但是当我们尝试验证生成的签名时出现签名不匹配错误。

Java 中的代码如下:

public static PrivateKey decodePrivateKey(String privateKeyStr) throws NoSuchAlgorithmException, InvalidKeySpecException {
String privateKeyRaw = trimPrivateKey(privateKeyStr);
byte[] buffer = decodeBase64(privateKeyRaw);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(buffer);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
return (RSAPrivateKey) keyFactory.generatePrivate(keySpec);
}

public static String sha256withRSAPSS(String privateKeyStr, String content) throws InvalidKeySpecException, NoSuchAlgorithmException, InvalidKeyException, SignatureException {
PrivateKey privateKey = decodePrivateKey(privateKeyStr);
Signature signature = Signature.getInstance("SHA256withRSA/PSS", new BouncyCastleProvider());
signature.initSign(privateKey);
signature.update(content.getBytes(CHARSET));
return encodeBase64(signature.sign());
}

不知道上面的python签名代码有什么问题。或者如何在python2.7中使用RSASSA-PSS-2048-SHA256算法?

非常感谢。

最佳答案

在 Python 部分,您使用 PKCS#1 v1.5 填充进行签名。在您使用 PSS 的 Java 部分。当您使用不同的方案时,这两个方案不会产生相同的输出是很自然的。一般更推荐使用PSS scheme over v1.5。

我不是 Python 专家,但在互联网上快速浏览后,也许 Hazmat 加密库可以帮助你在 Python 上使用它 ( https://cryptography.io/en/latest/hazmat/primitives/asymmetric/rsa/ ):

>>> from cryptography.hazmat.primitives import hashes
>>> from cryptography.hazmat.primitives.asymmetric import padding
>>> message = b"A message I want to sign"
>>> signature = private_key.sign(
... message,
... padding.PSS(
... mgf=padding.MGF1(hashes.SHA256()),
... salt_length=padding.PSS.MAX_LENGTH
... ),
... hashes.SHA256()
... )

编辑:如果 Hazmat 不适合您,请在此处查看已批准的答案:PKCS1_PSS sign() method

关于python - 如何在python中使用数字签名算法RSASSA-PSS-2048-SHA256,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53511961/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com