2011-05-09 29 views
6

javax.crypto.IllegalBlockSizeException:數據長度不能超過53個字節我知道這是因爲RSA算法只能加密RSA密鑰長度最大字節長度的數據(以位爲單位)除以8減十一填充 字節,即最大字節數=密鑰長度的比特/ 8 - 11.javax.crypto.IllegalBlockSizeException

這裏使用的是512密鑰大小,所以它不允許超過53.但我需要保持512 bit密鑰,但加密超過53字節是有可能的。

回答

7

是的,沒有。你不能用RSA加密,但你可以用下面的一個去:

  1. 不要用對稱加密算法並通過與RSA加密密鑰的通常的做法。例如,發送數據d到另一個人的公共密鑰PK:

    1. 發送EK(d)
    2. 發送串Epk(K)(d用帶有密碼K的對稱算法加密的)以及(K與加密與PK RSA算法)

    另一側開放PK(K),以獲得K,和開放的K(d),以獲得D.

  2. 的數據分割成小塊並單獨加密每一個。

第一種方法主要有兩個原因一個更好的一個:

  1. 你不惹的數據(除了加密本身)。
  2. 對稱加密/解密比公開加密要快得多,例如,RC4是數據的簡單XOR,而RSA使用大功率。

(3.必須有一個原因,PGP是如此普遍?)

+0

是否有可能使用其他非對稱算法如DSA加密大塊數據DSA – Lalchand 2011-05-09 15:15:02

+0

DSA是一種簽名算法,而不是加密算法,因爲我知道的所有加密算法都基於相同的數學原理,所以是不可能的,但請在兩分鐘內看到我編輯的答案。 – MByD 2011-05-09 15:18:07

+0

關於以前的評論 - 我忘了寫 - 所有** public **加密算法.. – MByD 2011-05-09 15:33:32

1

你爲什麼不採用包絡?生成對稱密鑰(AES),使用該AES密鑰對數據進行加密,然後使用公共RSA密鑰對AES密鑰進行加密。發送加密的數據以及加密的AES密鑰。然後使用專用RSA密鑰解密AES密鑰,然後使用它解密其餘數據。這將允許您加密任何大小的數據。

相關問題