当前位置: 首页 > 知识库问答 >
问题:

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

巫坚白
2023-03-14

我试图在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中使用RSASSA-PSS-2048-SHA256算法。7.

非常感谢。

共有1个答案

岳允晨
2023-03-14

在Python文章中,您使用的是PKCS#1 v1。5.用于签名的填充。在Java部件上,您正在使用PSS。当您使用不同的方案时,这两种方案自然不会产生相同的输出。通常,建议在v1以上使用PSS方案。5.

我不是Python专家,但在互联网上快速浏览之后,也许Hazmat crypto库可以在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()
... )

编辑:如果危险物质不适合你,看看这里批准的答案:PKCS1_PSS符号()方法

 类似资料:
  • 我想分两步使用RSA/PSS签名制作SHA256,首先散列一条消息,然后使用RSASSA-PSS签名摘要 但我使用SHA256时RSA/PSS无法验证 我需要一些帮助,谢谢你的帮助。

  • 我已经把它归结为我能做的最简单的测试用例。我需要获取Python中生成的RSASSA-PSS签名,并在Go中验证它们。创建RSA密钥对并用其签名的Python代码如下: 那里引用的pycrypto_keys库可以在这里找到,用于参考函数和的具体实现。 我的Go测试由两个简单的文件组成,这些文件只依赖于核心包。首先是验证功能,verify.go: 第二,一个测试用例。密钥对和签名是使用顶部的Pyth

  • 我们使用Chilkat在PowerBuilder 9.0.3应用程序(以及PowerBuilder 12.6)中签名HTTP请求,但这就像Chilkat生成的签名不被Isabel的API接受(我们已经联系了Isabel,他们猜测签名中存在参数问题算法)。伊莎贝尔API(https://documentation.ibanity.com/http-signature)的留档说,我们必须使用带有以下参

  • 我正在研究PKSC1V2.2 RSASSA-PSS签名方案。我得到了一些用于最终结果测试的标准测试向量,但是我的结果不匹配。为了检查我的代码哪里出错了,我需要一些具有中间结果的测试向量。 我使用的是RSA 2048和SHA 256。 请帮助...如果有人有或者如果你知道我在哪里可以得到它?还有任何其他方法来测试它。 问候

  • 我们为RSA签名创建了调试公钥和私钥,并生成sha256哈希并保存在cp1.bin中。然后我们尝试验证签名,但总是失败。如果我们不使用pss填充,验证命令将通过。任何人都可以帮忙评论吗? 谢谢 C:\Project\pkc C:\Project\pkc

  • 我花了无数个小时在这个图书馆里,但仍然无法让它工作。 我想用充气城堡库发送SMIME消息,用RSASSA-PSS签名,用AES加密,其中密钥传输应该是RSAES-OAEP,所有P1#v2.1 签名者优先,这是它的创建方式: 所以现在当它应该被签名、加密和使用OAEP填充时: 我找不到正确的setAlgorithmMapping()说明,因此尝试了以下组合: 顺便说一句,有人能解释一下,这个模式在这