java - 如何使用密码解密私钥(字符串) - java
问题描述
我正在尝试解密字符串中的私钥。密钥也有一个密码。我的私钥文件具有以下页眉和页脚:
-----BEGIN ENCRYPTED PRIVATE KEY-----\n
-----END ENCRYPTED PRIVATE KEY-----\n
'\n'
我可以在私钥内看到更多新行。我希望它是pem格式的。
以下代码的最后一行给了我这个错误:
PBE 参数解析错误:需要 AES 密码的对象标识符
这是我试过的代码:
String privateKeyPEM = a;
privateKeyPEM = privateKeyPEM.replace("-----BEGIN ENCRYPTED PRIVATE KEY-----\n", "");
privateKeyPEM = privateKeyPEM.replace("-----END ENCRYPTED PRIVATE KEY-----\n", "");
byte[] encoded = Base64.getMimeDecoder().decode(privateKeyPEM);
EncryptedPrivateKeyInfo pkinfo = new EncryptedPrivateKeyInfo(encoded);
我也尝试过使用充气城堡,但出现以下错误
类“org.bouncycastle.asn1.pkcs.RSAPublicKey”的签名者信息与同一包中其他类的签名者信息不匹配
注意:我使用的是 jdk11
我将不胜感激。谢谢
解决方案
您需要确保您的私钥使用 AES 密码进行加密。
在加密私钥文件的开头,您可以看到如下内容:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-CBC,2241040B6A6E0FBE
告诉您正在使用DEK-Info
什么加密算法。
您可以使用openssl
转换密码:
openssl rsa -in des.pem -aes256 -out aes.pem
获取 AES 加密私钥:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-256-CBC,40FACC69B7E9ED576BF8300B871701EB
截至今天,javax.crypto
仍然仅支持JDK-8076999 的AES 密码。这就是您会收到此错误的原因:
PBE parameter parsing error: expecting the object identifier for AES cipher
推荐阅读
- ios - Swift 5 如何使用按钮删除和复制表格视图单元格
- python - 如何加速下面的代码?实现没有中心元素的 maxpool
- python - 添加 https 支持后无法访问托管在 EC2 上的 Flask 应用程序
- reactjs - 用于初始化 useState 钩子的传入属性在调用钩子的更新程序方法时得到更新
- ssl - 如何通过 Jrockit Keytool 导入 crt 和 key
- python - 如何将抓取的数据列表转换为 excel 列?
- python - 计数值,使用 Pandas 保留重复项
- java - 添加测试后构建失败,即使脚本中没有错误。在eclipse中使用selenium,testng和maven
- thunderbird - Thunderbird 使用 qmail 扩展回复
- hadoop - 如何使配置单元返回行更快?(比如说,限制 10)