如何在 Java 中将此私钥读取为 ECPrivateKey?
我有以下私钥,并尝试使用 BouncyCaste 和以下代码将其读取为 ECPrivateKey 的实例。但是,我遇到了空指针异常:
Key:
-----BEGIN EC PRIVATE KEY-----
MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgtqnvswtIdNxKy07B
D3Y9vvlpwvSDqWCvyWmWTNea2ImgCgYIKoZIzj0DAQehRANCAATa0LtPPOI+De/u
RY1vSxR7gFGSoyjaDZyif/sWujLZWEj6Rc2IEl62VfWQD3GeYCEEKP9qzpOGyO+b
HWR98kNd
-----END EC PRIVATE KEY-----
Parsing code:
private PrivateKey readPemAsPrivateKey(final String pem) throws IOException {
final PEMParser pemParser = new PEMParser(new StringReader(pem));
final Object parsedPem = pemParser.readObject();
if (!(parsedPem instanceof PEMKeyPair)) {
throw new IOException("Attempted to parse PEM string as a keypair, but it's actually a " + parsedPem.getClass());
}
Security.addProvider(new BouncyCastleProvider());
final JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
return converter.getKeyPair((PEMKeyPair) parsedPem).getPrivate();
}
The exception:
! java.lang.NullPointerException: null
! ... 29 common frames omitted
! Causing: org.bouncycastle.openssl.PEMException: unable to convert key pair: null
! at org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter.getKeyPair(Unknown Source) ~
有谁知道如何将此密钥读取为 ECPrivateKey 对象?
注意:
当我运行以下 openssl 命令时,它会以 Bouncycastle 接受的格式吐出密钥。不幸的是,在生产中我无法选择预处理密钥——我必须按原样使用密钥并在代码中处理它。
$ openssl ec -inform PKCS8 -in T5TK5598S7.p8
read EC key
writing EC key
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIGaopmcUKDBihelMJbKUyRmaR6F3Eo90EZaqZJ3/mBr0oAoGCCqGSM49
AwEHoUQDQgAEnYaxPG+o57xM5o/M5QNn0ocwlw12ZNVWFEo9tKDQ7Jz5Gz/0eMcP
mEhm5msFFpWgrY0/T92MfwByuaLws/rM3w==
-----END EC PRIVATE KEY-----
I have the following private key, and am attempting to read it as an instance of ECPrivateKey using BouncyCaste with the following code. However, I'm getting a null pointer exception:
Key:
-----BEGIN EC PRIVATE KEY-----
MIGTAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBHkwdwIBAQQgtqnvswtIdNxKy07B
D3Y9vvlpwvSDqWCvyWmWTNea2ImgCgYIKoZIzj0DAQehRANCAATa0LtPPOI+De/u
RY1vSxR7gFGSoyjaDZyif/sWujLZWEj6Rc2IEl62VfWQD3GeYCEEKP9qzpOGyO+b
HWR98kNd
-----END EC PRIVATE KEY-----
Parsing code:
private PrivateKey readPemAsPrivateKey(final String pem) throws IOException {
final PEMParser pemParser = new PEMParser(new StringReader(pem));
final Object parsedPem = pemParser.readObject();
if (!(parsedPem instanceof PEMKeyPair)) {
throw new IOException("Attempted to parse PEM string as a keypair, but it's actually a " + parsedPem.getClass());
}
Security.addProvider(new BouncyCastleProvider());
final JcaPEMKeyConverter converter = new JcaPEMKeyConverter().setProvider("BC");
return converter.getKeyPair((PEMKeyPair) parsedPem).getPrivate();
}
The exception:
! java.lang.NullPointerException: null
! ... 29 common frames omitted
! Causing: org.bouncycastle.openssl.PEMException: unable to convert key pair: null
! at org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter.getKeyPair(Unknown Source) ~
Does anyone know how I can read this key as an ECPrivateKey object?
Note:
When I run the following openssl command, it spits the key out in a format that Bouncycastle does accept. Unfortunately, in production I don't have the option to pre-process the key--I have to work with the key as-is and process it in code.
$ openssl ec -inform PKCS8 -in T5TK5598S7.p8
read EC key
writing EC key
-----BEGIN EC PRIVATE KEY-----
MHcCAQEEIGaopmcUKDBihelMJbKUyRmaR6F3Eo90EZaqZJ3/mBr0oAoGCCqGSM49
AwEHoUQDQgAEnYaxPG+o57xM5o/M5QNn0ocwlw12ZNVWFEo9tKDQ7Jz5Gz/0eMcP
mEhm5msFFpWgrY0/T92MfwByuaLws/rM3w==
-----END EC PRIVATE KEY-----
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论