我使用ssh-keygen -t rsa
以下是我的公钥
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDtbGPZjdnMWk8lJ/CdaBZROCtNk8H+Ru4keC7DK55q2t2ISRgjBaR4qZnWezAA2iJX3cwq2ulfwCPmyoc0G180lUEMDkZkeuWzyvwWjZIo0cehN2j28evgpZadfe+NxYYqQ2f7/3eJ+3IwT4EE6WmzaYjsYXloilJLVJFBbPkdy+1xnHAa1RXsdDNjMPQ9d9PSdr9BYlph21lzflk5wdBxXnLxzUD3mb3j0cCMrIl7IF2CbkKnBC4VFZahRRyJLBWvXvcxXR7Pspv6/WUE2GsZZ3GynAhS7LuHk7NKmB13+lQFejDGO4yVsXQLw7dg+JsIs4h3JkindgJRUytQq7lZ user@Ganesh-VirtualBox
这是我的代码,它为我提供了公钥
public static PublicKey getPublicKey(String filename)
throws Exception {
File f = new File(filename);
FileInputStream fis = new FileInputStream(f);
DataInputStream dis = new DataInputStream(fis);
byte[] keyBytes = new byte[(int)f.length()];
dis.readFully(keyBytes);
dis.close();
X509EncodedKeySpec spec =
new X509EncodedKeySpec(keyBytes);
KeyFactory kf = KeyFactory.getInstance("RSA");
return kf.generatePublic(spec);
}
我正在将正确的文件名传递给此方法。行kf.generatePublic(spec)
正在抛出错误,如下所示。
Exception in thread "main" java.security.spec.InvalidKeySpecException: java.security.InvalidKeyException: invalid key format
at sun.security.rsa.RSAKeyFactory.engineGeneratePublic(RSAKeyFactory.java:205)
at java.security.KeyFactory.generatePublic(KeyFactory.java:334)
为什么我收到此错误?
答案 0 :(得分:1)
通常,X.509格式需要公钥,PKCS#8格式需要私钥。因此,无论何时处理公钥/私钥,都需要确保它们的格式正确。
请阅读以下Oracle docs
所以,首先你需要一个关键规范。你可以通过 假设键是根据X.509编码的 标准,例如,如果生成密钥就是这种情况 使用SUN提供商提供的内置DSA密钥对生成器:
您收到的主要错误是InvalidKeyException
says:
这是无效密钥的例外(无效编码,错误 长度,未初始化等)。
现在,在您的情况下,导致此错误的是无效编码,因为您正在使用生成的公共密钥而不使其与X509EncodedKeySpec
兼容。因此,解决问题首先按照X.509标准对公钥进行编码,以便您可以在X509EncodedKeySpec
中使用