3

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

4

1 回答 1

2

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

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

于 2013-08-29T22:56:39.630 回答