gpt4 book ai didi

java - 充气城堡 : PEMReader => PEMParser

转载 作者:太空狗 更新时间:2023-10-29 22:32:27 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com