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