我有 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 定义了一种编码和传输密钥的方法,它并非特定于 OpenSSL; PKCS#1 定义了一种使用 RSA 密钥(无论它如何加载到应用程序中,无论是否使用 PKCS#8)来执行和验证数据数字签名的方法。
您拥有的这段代码做了三件事:
- 它将 Base64 解码为 PKCS#8
- 它将 PKCS#8 解码为内存中的实际密钥(请注意,您可能需要在此处提供密码)
- 它使用所述密钥使用 SHA-1 执行 PKCS#1 v1.5 签名
- 它对签名进行 Base64 编码
The PyCrypto API 中的 PKCS#1 v1.5 签名示例完全执行步骤 #2 和 #3。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)