如何使用JCA读取BouncyCastle私钥PEM文件?
在我们的一个应用程序中,使用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
结果输出我可以base64编码,然后使用这个Java / 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 KeyPair对象作为输出。 重新解释我的原始问题:我可以在不依赖于PEMReader(以及其他一些其他BouncyCastle类)的情况下执行上述代码的等效操作吗?
PEM文件中的密钥已经存储在PKCS#8格式中,因此如果没有使用密码加密,您只需删除标题(—– BEGIN RSA PRIVATE KEY —–),Base64-decode输入和得到所需的字节。
- 如何使用BouncyCastle lightwigth API生成cms封装数据
- ECDSA使用BouncyCastle签名并使用Crypto ++进行validation
- 重新部署应用程序时无法加载Bouncycastle
- Java BouncyCastle Cast6Engine(CAST-256)加密
- 无法validation签名(cmssigneddata)bouncycastle
- Bouncy castle提供未知的HashAlgorithm
- 使用bouncycastle / spongycastle读取加密的私钥
- 如何用Bouncy Castle生成对称密钥?
- 为什么keyStore.aliases()对于pkcs12是空的