java - 充气城堡 : PEMReader => PEMParser

标签 java bouncycastle

像 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/

相关文章:

java - 分割字符串!在JAVA中

java - RSA_NO_PADDING 在 Java 和 C++ 之间有什么不同?

java - 从 X509Certificate 获取主题公钥

java - 我可以使用任何具有 SkippingCipher 接口(interface)的东西解密 Bouncy CaSTLe 中的 GCM AES 流吗?

java - Java中ECDSA的PEM编码

java - 未提供 Android 列出的加密算法

java - 为什么==返回true?

java - 为 Android 应用程序登录 "Java Library Code"库

java - 在特定位置将一张图像添加/覆盖到另一张图像?

java - Spring Boot 验证该字段是字符串类型