我有 .p12 文件,我正在使用 openssl 提取私钥,我有一个用于提取它的密码。
openssl pkcs12 -in my.p12 -nocerts -out privateKey.pem
在我得到我的私钥之后,我正在尝试使用该密钥进行加密:
public static void main(String[] args) throws Exception {
Security.addProvider(new BouncyCastleProvider());
KeyPair keyPair = readKeyPair(privateKey, "testpassword".toCharArray());
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());
byte[] textEncrypted = cipher.doFinal("hello world".getBytes());
System.out.println("encrypted: "+new String(textEncrypted));
cipher.init(Cipher.DECRYPT_MODE, keyPair.getPrivate());
byte[] textDecrypted = cipher.doFinal(textEncrypted);
System.out.println("decrypted: "+new String(textDecrypted));
}
private static KeyPair readKeyPair(File privateKey, char[] keyPassword) throws IOException {
FileReader fileReader = new FileReader(privateKey);
PEMReader r = new PEMReader(fileReader, new DefaultPasswordFinder(keyPassword));
try {
return (KeyPair) r.readObject(); // this returns null
} catch (IOException ex) {
throw new IOException("The private key could not be decrypted", ex);
} finally {
r.close();
fileReader.close();
}
}
r.readObject(); 返回空值。但是当我通过这个命令自己创建一个私钥时:
openssl genrsa -out privkey.pem 2048
上面的代码工作正常。
- 如何正确从 p12 文件中提取私钥?
- 或者有什么方法可以使用 p12 文件来加密/解密文本而不通过命令行提取?
我知道这只是PKCS#12只是存储密钥的存档文件。