我正在尝试解密字符串中的私钥。密钥也有一个密码短语。我的私钥文件具有以下页眉和页脚:
-----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
我将感谢您的帮助。谢谢
答案 0 :(得分:0)
您需要确保您的私钥已使用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