![](/img/trans.png)
[英]Java - Public-private key encryption - how to calculate private key in RSA
[英]Encryption using public-private keys
我已經使用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)
為什么會出現此錯誤?
通常,X.509格式需要公用密鑰,而PKCS#8格式則需要專用密鑰。 因此,無論何時使用公鑰/私鑰,都需要確保其格式正確。
從Oracle文檔中閱讀以下內容
因此,首先需要一個關鍵的規范。 您可以通過以下方法獲得一個,假設該密鑰是根據X.509標准編碼的,例如,如果該密鑰是由SUN提供程序提供的內置DSA密鑰對生成器生成的,則是這種情況:
您得到的主要錯誤是InvalidKeyException
,它說 :
這是無效鍵( 無效編碼 ,長度錯誤,未初始化等)的例外。
現在,在這種情況下,是導致這種錯誤的無效編碼,因為您使用的是明文使用的生成的公鑰,並且不使其與X509EncodedKeySpec
兼容。 因此, 要解決您的問題,請先按照X.509標准對公共密鑰進行編碼,以便可以在X509EncodedKeySpec
使用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.