我已经创建了一个ECDSA密钥,现在需要将其转换为SSH2密钥。
final KeyPairGenerator keyGen = KeyPairGenerator.getInstance("ECDSA");
ECGenParameterSpec params = new ECGenParameterSpec("secp384r1");
keyGen.initialize(params);
final KeyPair keyPair = keyGen.generateKeyPair();
//format publicKey in ssh2
final ECPublicKey ecPublicKey = (ECPublicKey) keyPair.getPublic();
writeJavaECPublicKeyToSSH2(ecPublicKey) ??
我们如何实现这一点?
1条答案
按热度按时间fcg9iug31#
仅供参考,Java默认使用X.509 ASN.1结构对公钥进行编码。这将包括一堆OID和数据沿着实际公钥。下面是此类公钥的示例,解析为ASN.1:
使用ssh-keygen以相同的曲线生成的公钥将更短,因为它遵循更轻的结构:
幸运的是,BouncyCastle包含OpenSSH实用程序类:OpenSSHPrivateKeyUtil和OpenSSHPublicKeyUtil,它们允许这样的转换。在您的情况下,它可以归结为:
一条评论:您对 KeyPairGenerator.getInstance(“ECDSA”) 的调用不正确。它应该是 KeyPairGenerator.getInstance(“EC”)。