Java 如何在python中生成PKCS8 RSA签名
我有pkcs8_rsa_private_密钥文件,它是由openssl从rsa_private_key.pem文件生成的 我需要用python中的私钥做一个签名,用下面的java代码做相同的签名Java 如何在python中生成PKCS8 RSA签名,java,python,encryption,openssl,rsa,Java,Python,Encryption,Openssl,Rsa,我有pkcs8_rsa_private_密钥文件,它是由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"
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与否)对数据执行和验证数字签名的方法
您拥有的代码有三件事:
from Crypto.Signature import PKCS1_v1_5 as pk
from Crypto.Hash import SHA
class Crypt(object):
pkcs8_private_key = RSA.importKey(open('pkcs8_rsa_private_key.pem', 'r').read())
def rsa_sign(cls, des_reqdata):
"""
@:param reqdata: request reqData
"""
h = SHA.new(des_reqdata)
signer = pk.new(cls.pkcs8_private_key)
signature = signer.sign(h)
return base64.b64encode(signature)