像 PEM 证书一样
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC,B9846B5D1803E.....
使用 BC 1.46,我使用以下代码提取 key 对:
int myFunc(String pemString, char [] password) {
ByteArrayInputStream tube = new ByteArrayInputStream(pemString.getBytes());
Reader fRd = new BufferedReader(new InputStreamReader(tube));
PEMReader pr = new PEMReader(fRd, new Password (password), "BC");
try {
Object o = pr.readObject();
if (o instanceof KeyPair)
.....
现在我刚刚安装了 BC 1.48,他们告诉我 PEMReader 已被弃用,必须由 PEMParser 替换。
我的问题是,据我所知,PEMParser 中没有密码位置。
有人可以给我一个例子,说明如何将我的代码迁移到 PEMParser 版本吗?
最佳答案
我只是想解决同样的问题,但没有找到答案。 所以我花了一些时间研究 BC API 并找到了适合我的解决方案。 我需要从文件中读取私钥,所以在 myFunc 方法中有 privateKeyFileName 参数而不是 pemString 参数。
使用 BC 1.48 和 PEMParser:
int myFunc(String privateKeyFileName, char [] password) {
File privateKeyFile = new File(privateKeyFileName); // private key file in PEM format
PEMParser pemParser = new PEMParser(new FileReader(privateKeyFile));
Object object = pemParser.readObject();
PEMDecryptorProvider decProv = new JcePEMDecryptorProviderBuilder().build(password);
JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
KeyPair kp;
if (object instanceof PEMEncryptedKeyPair) {
System.out.println("Encrypted key - we will use provided password");
kp = converter.getKeyPair(((PEMEncryptedKeyPair) object).decryptKeyPair(decProv));
} else {
System.out.println("Unencrypted key - no password needed");
kp = converter.getKeyPair((PEMKeyPair) object);
}
}
关于java - 充气城堡 : PEMReader => PEMParser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14919048/