簡體   English   中英

使用公私鑰加密

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM