如何解决如何从 AsymmetricKeyParameter 创建 java.security.PublicKey
您好,我正在尝试将公钥写入 PEM 文件。
org.bouncycastle.openssl.jcajce.JcaPEMWriter
似乎是正确的工具,但它使用 org.bouncycastle.openssl.jcajce.JcaMiscPEMGenerator
,它期望密钥是 java.security.PublicKey
的实例。
不幸的是,我正在处理的项目的所有其余部分都使用 AsymmetricKeyParameter
作为公钥。我检查了里面有你想从公钥知道的一切,包括点 G 和曲线顺序,但它与 java.security.PublicKey
不兼容。
如果我拥有的是 JcaPEMWriter
的实例,有没有办法使用 AsymmetricKeyParameter
?顺便说一下,我使用 ECDSA 密钥。
(起初我对此感到惊讶,因为 BouncyCastle 的 JcaPEMWriter
与它们自己的类不兼容,AsymmetricKeyParameter
)
解决方法
看起来 JcaPEMWriter
不能直接处理 AsymmetricKeyParameter
对象。但是将 AsymmetricKeyParameter
对象转换为 PublicKey
对象相对容易。
为此可以应用 BouncyCastle 的 EC5Util
类,该类处理从 ECDomainParameters
到 ECParameterSpec
以及从 BouncyCastle 的 ECPoint
到 Java 的 ECPoint
的转换。
然后可以像以前一样使用 PublicKey
作为 X.509/SPKI PEM 编码的公钥导出 JcaPEMWriter
对象:
// AsymmetricKeyParameter object containing the public EC key
AsymmetricKeyParameter asymmetricKeyParameter = ...
// Convert AsymmetricKeyParameter object to PublicKey object
ECPublicKeyParameters ecPublicKeyParameters = (ECPublicKeyParameters)asymmetricKeyParameter;
ECParameterSpec ecParameterSpec = EC5Util.convertToSpec(ecPublicKeyParameters.getParameters());
ECPoint ecPoint = EC5Util.convertPoint(ecPublicKeyParameters.getQ());
ECPublicKeySpec ecPublicKeySpec = new ECPublicKeySpec(ecPoint,ecParameterSpec);
PublicKey publicKey = KeyFactory.getInstance("EC").generatePublic(ecPublicKeySpec);
// Export PublicKey object with JcaPEMWriter in X.509/SPKI format,PEM encoded
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。