gpt4 book ai didi

python - 使用 PKCS#8 编码的私钥创建兼容的 Java "RSA"签名

转载 作者:太空宇宙 更新时间:2023-11-03 19:14:15 24 4
gpt4 key购买 nike

我有 pkcs8_rsa_private_key 文件,它由 openssl 从 rsa_private_key.pem 文件生成。

我需要在python中使用私钥进行签名,与下面的java代码进行相同的签名。

public static final String SIGN_ALGORITHMS = "SHA1WithRSA";

public static String sign(String content, String privateKey) {
String charset = "utf-8";
try {
PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(
Base64.decode(privateKey));
KeyFactory keyf = KeyFactory.getInstance("RSA");
PrivateKey priKey = keyf.generatePrivate(priPKCS8);

java.security.Signature signature = java.security.Signature
.getInstance(SIGN_ALGORITHMS);

signature.initSign(priKey);
signature.update(content.getBytes(charset));

byte[] signed = signature.sign();

return Base64.encode(signed);
} catch (Exception e) {
e.printStackTrace();
}

return null;
}

最佳答案

PKCS#8 定义了一种编码和传输 key 的方法,它并非特定于 OpenSSL; PKCS#1 定义了一种使用 RSA key (无论它如何加载到您的应用程序中,无论是否使用 PKCS#8)来执行和验证数据数字签名的方法。

您拥有的这段代码做了三件事:

  1. 它将 Base64 解码为 PKCS#8
  2. 它将 PKCS#8 解码为内存中的实际 key (请注意,您可能需要在此处提供密码)
  3. 它使用所述 key 使用 SHA-1 执行 PKCS#1 v1.5 签名
  4. 它对签名进行 Base64 编码

example for PKCS#1 v1.5 signing in the API of PyCrypto完全执行步骤 #2 和 #3。

关于python - 使用 PKCS#8 编码的私钥创建兼容的 Java "RSA"签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11895065/

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