作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 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/
我是一名优秀的程序员,十分优秀!