公钥和私钥是用"ssh-keygen -t rsa"生成的,我把生成的公钥以字符串的形式传入下面的函数(从网上找的)就会报错。
public static PublicKey string2PublicKey(String pubStr) throws Exception{
ByteBuffer byteBuffer =
ByteBuffer.wrap(Base64.getDecoder().decode(pubStr));
byte[] keyBytes = byteBuffer.array();
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey publicKey = keyFactory.generatePublic(keySpec);
return publicKey;
}
上面函数原本在提供的程序中传入的是“MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVRiDkEKXy/KBTe+UmkA+feq1zGWIgBxkgbz7aBJGb5+eMKKoiDRoEHzlGndwFKm4mQWNftuMOfNcogzYpGKSEfC7sqfBPDHsGPZixMWzL3J10zkMTWo6MDIXKKqMG1Pgeq1wENfJjcYSU/enYSZkg3rFTOaBSFId+rrPjPo7Y4wIDAQAB”是没有问题的。
而我传入的是“AAAAB3NzaC1yc2EAAAADAQABAAABAQDVDZ+IhrOQo0ditlTlLTq7k2g1hFvw5o7TiUnkT4tKHIi2EtNloMknZgs3aBPdSb6a21ZaD0QPCRAnZ9/2Pcs4OvrRcwNzZBxLdjNGPrfitH0n62Y6HSp3LSvhRKa25AcBsgmQrAKoOveSunlZNKVCSuaBk4BayHb7QPRB8G8m9fKl3Dev9IY207kqUu6j8/iZB5hocK6rBkYlobyQcPVmBU9Y/ZcI7cnP4TiHnX7wi2KNRbm6yNYbRQzKKl6QSLpIPuRsqDmZvM0yoDJDj7Sio7f21oijosrlMvapjmGvFOn1Gcl6Sh0YYTGUXANkZqwWqkEpUs1l03s+OAEOBUQH”。请问问题在哪里,该如何将由ssh-keygen生成的密钥在java中用于加密和解密?
- Delete Messages from a Topic in Apache Kafka
- Jackson Deserialization not calling deserialize on
- How to maintain order of key-value in DataFrame sa
- StackExchange API - Deserialize Date in JSON Respo
- Difference between Types.INTEGER and Types.NULL in
看了这个链接基本可以理解 https://blog.csdn.net/jiftlixu/article/details/19836405
大约是这样。
先用base64解码。
前十一字节固定为‘0007ssh-rsa’
指数长度从第十一字节开始,取4字节读出,转成数字,你这里是3
然后取出对应(3)字节的指数,这里是‘\x01\x00\x01’,转成十进制是65537
接下来4个字节是模数的长度,这里是‘\x00\x00\x01\x01’, 10进制是257
然后取出257个字节,转成16进制是这样
也可以转十进制看,太长了不贴了,这个就是模数。
然后把模数和指数放在RSAPublicKeySpec这个里面生成公钥。
不是很会java,这个代码我也没跑过,可以研究一下,有问题再讨论。