2009-06-16 122 views
-1

我使用JAVA 我的朋友解密數據採用了Symbian如何使用RSA專用密鑰

我和我的朋友有相同的RSA模數。如果我使用公鑰對數據進行加密,那麼我的朋友可以解密這些數據。但是,如果我的朋友用公鑰加密數據,那麼我無法解密數據。我得到了一個錯誤的「數據必須先從零」

public static byte[] encrypt(byte[] encrptdByte) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { 
    byte[] encryptionByte = null; 
    Cipher cipher = Cipher.getInstance("RSA"); 
    cipher.init(Cipher.ENCRYPT_MODE, publicKey); 
    encryptionByte = cipher.doFinal(encrptdByte); 
    return encryptionByte; 
} 

public static void decrypt(byte[] encrptdByte) throws NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, InvalidKeyException { 
    byte[] encryptionByte = null; 
    Cipher cipher = Cipher.getInstance("RSA"); 
    cipher.init(Cipher.DECRYPT_MODE, publicKey); 
    encryptionByte = cipher.doFinal(encrptdByte); 

    System.out.println("Recovered String  ::: " + new String(encryptionByte)); 
} 

感謝 蘇尼爾

+0

你可以發佈一些你正在使用的Java代碼,或哪些庫? – Thilo 2009-06-16 09:12:55

+0

我正在使用RSA,沒有填充沒有密碼模式。 – Sunil 2009-06-16 09:22:04

+0

我已發佈請看看它。 – Sunil 2009-06-16 09:23:06

回答

6

decrypt函數使用publicKey - 它從何而來?請注意,使用公鑰加密的數據必須使用相應的私鑰解密,而不能使用相同的公鑰。非對稱加密如RSA具有密鑰對的概念,其中對中的每個密鑰可以解密用另一個密鑰加密的數據,相比之下,對稱加密,如AES,其中相同的密鑰適用於加密和解密。

2

要添加以前的文章,使用不對稱加密大規模地加密/解密數據是不切實際的(因爲它比對稱加密慢得多)。非對稱加密(如RSA)最實際的用途是加密用於加密數據的對稱密鑰(用於AES或類似算法),並對消息摘要(SHA-256等)的安全散列進行簽名。

加密的郵件通常封在「信封」中,該信封包含加密的郵件以及用於加密的密鑰。密鑰當然用接收者公鑰加密,從而確保只有持有者私鑰才能檢索密鑰。

最後,消息的發送者可以選擇計算消息的安全散列並使用發送者的私鑰對其進行加密。收件人使用發件人的公鑰解密加密的哈希,並與計算出的哈希進行比較以驗證發件人的身份。