gpt4 book ai didi

java - 使用充气城堡读取 SSLeay 格式私钥

转载 作者:行者123 更新时间:2023-12-02 04:59:28 25 4
gpt4 key购买 nike

尝试读取 SSLeay 格式私钥时抛出 InvalidKeyException。

请在下面找到详细信息:-我有一个 SSLeay 格式的私钥。pem 格式以以下文件开头

-----开始 RSA 私钥-----

我正在编写代码来获取以字节格式保存的私钥并将其转换为 PrivateKey。变量 privateKeyBytes 包含字节格式的私钥/

String pkStrFormat = new String(privateKeyBytes, "UTF-8");
pkStrFormat = pkStrFormat.replaceAll("(-----BEGIN RSA PRIVATE KEY-----\\r?\\n|-----END RSA PRIVATE KEY-----+\\r?\\n?)","");
byte[] keyBytesOfPrivateKey = org.bouncycastle.util.encoders.Base64
.decode(pkStrFormat.getBytes());
KeyFactory ecKeyFac = KeyFactory.getInstance("RSA");
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytesOfPrivateKey);
PrivateKey priKey = ecKeyFac.generatePrivate(keySpec);

我收到以下异常:-

Caused by: java.security.InvalidKeyException: IOException : version mismatch: (supported:     00, parsed:     01
at sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:350)
at sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:356)

使用 PKCS8 格式 key 时,代码可以正常工作。

最佳答案

BEGIN RSA PRIVATE KEY 开头的 PEM 文件是 PKCS#1,而不是 PKCS#8。 PKCS#1 本质上是固定算法 RSA 的 PKCS#8,因此删除了算法标识符。要么像 https://superuser.com/questions/606215/openssl-pkcs8-default-format-gives-rsa-private-key 那样转换您的 key :

openssl pkcs8 -topk8 -inform pem -in file.key -outform pem -nocrypt -out file.pem

或使用类似于Bouncy Castle : PEMReader => PEMParserPEMParser (没有密码的东西)

关于java - 使用充气城堡读取 SSLeay 格式私钥,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28430603/

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