sta*_*ist 20 java bouncycastle
有像PEM证书一样
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC,B9846B5D1803E.....
Run Code Online (Sandbox Code Playgroud)
使用BC 1.46,我使用以下代码提取密钥对:
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)
.....
Run Code Online (Sandbox Code Playgroud)
现在我刚刚安装了BC 1.48,他们告诉我PEMReader已被弃用,必须由PEMParser替换.
我的问题是,AFAIK,PEMParser中没有密码的地方.
有人能举例说明如何将我的代码迁移到PEMParser版本吗?
小智 36
我只需要解决同样的问题,但没有找到答案.所以我花了一些时间学习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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30847 次 |
| 最近记录: |