Java生成的公钥和ssh-keygen生成密钥之间的区别

时间:2013-08-29 22:24:19

标签: java ssh

我无法将包含RSA公钥的字符串转换为java.security PublicKey类型,该字符串是我在cygwin中使用SSh-keygen生成的。

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

  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对象?

1 个答案:

答案 0 :(得分:2)

第一个键是ssh-rsa格式。第二个关键是PKCS8。

您可以使用-m ssh-keygen选项以java支持的格式生成密钥。