Java生成的公钥与ssh-keygen生成的密钥的区别

3

我希望您能够帮忙翻译一下关于IT技术的内容。需要翻译的内容是一个包含RSA公钥的字符串,该公钥使用cygwin中的SSH-keygen工具生成。我想将其转换为java.security.PublicKey类型,但遇到了困难。

以下是我用来转换密钥的代码:

  BASE64Decoder decoder = new BASE64Decoder();
  byte[] privBytes = decoder.decodeBuffer(publicKey);
  KeyFactory keyFact = KeyFactory.getInstance("RSA");
  PublicKey testKey = keyFact.generatePublic(new X509EncodedKeySpec(publicBytes));

这段代码给我返回了错误信息。
java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: invalid key format

当使用此密钥(通过cygwin生成)时,
AAAAB3NzaC1yc2EAAAADAQABAAABAQDQQ8K7FN3IvoLsgxyTHHidrhrp/4L1ts7fc5ooKi2lAw8pXYSseTH/ScS7qCCTTsBJ0DgdHdzjaHn8dTpOvud5Za0eiJtbPSyFmkNIwGYLXI/AnzF0sRNbSGmBeB/jQtRJBTS+1x5sVwOwGdx1jTx5m7yTmBjn9+/Hftke6UBY9dLKcRph2gpyRx1OWSFKC+mheBjpwGgapQNHFTPvhgQPp99HdGufBDiQWw4o4bIE7XIEyMpIt6KAsucbWSh67zYTaQjYzj8Bu3asCIlBy7KfdLWgrtgxddwtPjfYL3ZtGmhd3IiIwRdHQFHrJP0KbEejhJQF+2ApqFhL8yk+O3wL

然而,每当我使用Java密钥生成器创建一对密钥时,我可以将其转换为字符串,保存并使用相同的方法读取它,这样就可以正常工作。我会得到一个看起来像这样的公钥:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTK5ad+TnBo/N6FbPtFOtE4crvXkQUimp+gLLp
OA8QRpzTFD9zIV42695rYqmAHZRfBPA8TjEj9WXw0yRAIL3+hbHmOnLyrLfJ+5pD05B7ul83OKgV
mkLtZQacTNjX2iIeNd08ecP4+Chh/uE2dIRxHX1W00TZINySqxgW1cpjiwIDAQAB

所以,我的问题是这两个密钥之间有什么区别,如何成功地将第一个密钥转换为可用的PublicKey对象?


你可能会对这个问题感兴趣,它几乎是一个重复的问题。 - Bruno
1个回答

2

第一个密钥采用ssh-rsa格式。第二个密钥采用PKCS8格式。

您可以使用-m选项来生成java支持的密钥格式,具体方法是使用ssh-keygen命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接