这个问题已经在这里有一个答案:
- 转换采用openSSH RSA密钥对javax.crypto.Cipher中的兼容格式 1个回答
在我们的应用程序的一个私钥使用BouncyCastle的的PEMWriter存储。 目前我正在研究,如果我们可以摆脱BouncyCastle的依赖,因为Java 7中似乎有我们需要的一切。 唯一的问题是,我不能读取存储在数据库中PEM编码字符串的私钥(证书/公钥是罚款)。
如果我保存从数据库到文件的私有密钥的PEM编码字符串,我可以运行的OpenSSL的密钥转换为PKCS#8格式是这样的:
openssl pkcs8 -topk8 -inform PEM -outform DER \
-in private_key.pem -out private_key.der -nocrypt
将得到的输出I可以Base64编码,然后读取使用的爪哇/ JCA码位:
byte[] privateKeyBytes =
DatatypeConverter.parseBase64Binary(privateKeyDERcontents);
PrivateKey prKey =
KeyFactory.getInstance("RSA").
generatePrivate(new PKCS8EncodedKeySpec(privateKeyBytes));
该私钥存储预期的公钥匹配,也就是说我可以从明文往返密文和背部。
我的问题是:我可以直接读取原PEM编码不知何故?
编辑
下面是一些代码读取使用BouncyCastle的有问题的字符串:
if (Security.getProvider("BC") == null) {
Security.addProvider(new BouncyCastleProvider());
}
PEMReader pemReader = new PEMReader(new StringReader(privateKeyPEM));
KeyPair keyPair = (KeyPair) pemReader.readObject();
PrivateKey key = keyPair.getPrivate();
所述“privateKeyPEM”是在数据库中的PEM编码的字符串,否则这个例子中是自包含的。 有趣的是,它已经使用了JCA密钥对对象作为输出。 要改写我原来的问题:我可以做的代码相当于上面,而不依赖于PEMReader(反过来不少其他BouncyCastle的类)?