0
我已经生成使用ssh-keygen -t rsa
加密使用公开私钥
公私密钥以下是我的公钥
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDtbGPZjdnMWk8lJ/CdaBZROCtNk8H+Ru4keC7DK55q2t2ISRgjBaR4qZnWezAA2iJX3cwq2ulfwCPmyoc0G180lUEMDkZkeuWzyvwWjZIo0cehN2j28evgpZadfe+NxYYqQ2f7/3eJ+3IwT4EE6WmzaYjsYXloilJLVJFBbPkdy+1xnHAa1RXsdDNjMPQ9d9PSdr9BYlph21lzflk5wdBxXnLxzUD3mb3j0cCMrIl7IF2CbkKnBC4VFZahRRyJLBWvXvcxXR7Pspv6/WUE2GsZZ3GynAhS7LuHk7NKmB13+lQFejDGO4yVsXQLw7dg+JsIs4h3JkindgJRUytQq7lZ [email protected]
这是我的代码,让我的公钥
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)
为什么我得到这个错误?
SSH密钥不在X509中编码。请参阅http://stackoverflow.com/questions/12749858/rsa-public-key-format上的答案。 – hexafraction
最近版本的OpenSSH应该能够以“X.509”(真正的SPKI)PEM格式输出带有奇怪名字的'ssh-keygen -e -m PKCS8'的公钥。 Java在这里不能处理PEM,因此要么(1)删除标志行并将base64转换为二进制DER或(2)使用'openssl rsa -pubin -in pemfile -out derfile -outform der'。或者,OpenSSH默认使用OpenSSL兼容的PEM格式作为* private *键,所以给定私钥'id_rsa'只需做'openssl rsa -in id_rsa -pubout -out publicderfile -outform der'。在OpenSSL 1.0.0+中,您可以使用'pkey'而不是'rsa'。 –