我希望您能够帮忙翻译一下关于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对象?