【发布时间】:2022-01-09 18:40:00
【问题描述】:
关于如何在 java 11 中使用椭圆曲线私钥的小问题。
我有那些命令:
openssl pkcs12 -in file.p12 -out output.txt
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
然后,我可以在输出上运行 cat:
cat output.txt
Bag Attributes
friendlyName:
localKeyID:
Key Attributes: <No Attributes>
-----BEGIN ENCRYPTED PRIVATE KEY-----
MI[...]0=
-----END ENCRYPTED PRIVATE KEY-----
Bag Attributes
friendlyName:
localKeyID:
subject=/CN=
issuer=/CN=
-----BEGIN CERTIFICATE-----
MII[...]Z
-----END CERTIFICATE-----
注意,我使用 [...] 来编辑实际内容。
我只想使用这个私钥,-----BEGIN ENCRYPTED PRIVATE KEY----- -----END ENCRYPTED PRIVATE KEY----- 块中的那个
因此,我尝试了以下方法: 我首先删除了BEGIN ENCRYPTED PRIVATE,换行符,END ENCRYPTED PRIVATE KEY
String privateKeyPEM = "MI[...]0="; //the same private key as above
byte[] keyData = Base64.getDecoder().decode(privateKeyPEM);
EncodedKeySpec privKeySpec = new PKCS8EncodedKeySpec(keyData);
KeyFactory kf = KeyFactory.getInstance("EC");
PrivateKey privKey = kf.generatePrivate(privKeySpec);
但是,我收到此错误:
aused by: java.security.InvalidKeyException: IOException : DER input, Integer tag error
at java.base/sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:350)
at java.base/sun.security.pkcs.PKCS8Key.decode(PKCS8Key.java:355)
at jdk.crypto.ec/sun.security.ec.ECPrivateKeyImpl.<init>(ECPrivateKeyImpl.java:74)
at jdk.crypto.ec/sun.security.ec.ECKeyFactory.implGeneratePrivate(ECKeyFactory.java:237)
at jdk.crypto.ec/sun.security.ec.ECKeyFactory.engineGeneratePrivate(ECKeyFactory.java:165)
请问有什么问题吗? 另外,请问怎么解决?
谢谢
【问题讨论】:
标签: java encryption elliptic-curve