我有java代码使用pem证书加密文本,如下所示
/* Load Public key from certificate file */
CertificateFactory fact = CertificateFactory.getInstance("X.509");
FileInputStream is = new FileInputStream("cert.pem");
Certificate cer = fact.generateCertificate(is);
PublicKey publicKey = cer.getPublicKey();
/* Encrypt data using public key */
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
String encryptedData = Base64.encodeBase64String(cipher.doFinal(data.getBytes("UTF-8")));
我可以使用python中的以下步骤从cert.pem中提取公钥:
# Extract public key from certificate file using openssl
openssl x509 -inform pem -in cert.pem -pubkey -noout > publickey.pem
# Load public key in python
from Crypto.PublicKey import RSA
pubkey = open('publickey.pem').read()
key = RSA.importKey(pubkey)
Java代码为每个新运行的文本生成不同的加密字符串,就好像我使用以下python代码加密数据一样,它为每个新运行的文本生成相同的加密字符串。
b64encode(key.encrypt(data, 32)[0])
现在我不确定如何加密python中的数据,其结果与上面的Java代码相同。你能提出一些建议吗,我已经在网上搜索过,但没找到任何正确的解决方案?