【问题标题】:Difference between Java generated public Key and ssh-keygen generated keyJava 生成的公钥和 ssh-keygen 生成的密钥的区别
【发布时间】:2013-09-02 12:50:25
【问题描述】:

我无法将包含 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 对象?

【问题讨论】:

标签: java ssh


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-08-06
    • 2016-09-15
    • 2021-09-10
    • 1970-01-01
    • 2019-06-11
    • 2011-07-13
    • 1970-01-01
    • 2019-05-05
    相关资源
    最近更新 更多