javax.crypto.IllegalBlockSizeException

时间:2011-05-09 14:52:36

标签: java cryptography

javax.crypto.IllegalBlockSizeException:数据不得超过53个字节 我知道这是因为RSA算法只能加密具有最大字节长度RSA密钥长度的数据,以8位减去11位填充的比特 字节,即最大字节数=密钥长度,以比特/ 8 - 11。

这里使用512密钥大小,因此它不允许超过53.但我需要保持512位密钥,但加密超过53字节是否有可能。

2 个答案:

答案 0 :(得分:7)

是和否。您无法使用RSA进行加密,但您可以使用以下方法之一:

  1. 使用对称算法加密并传递使用RSA加密的密钥的常用方法。例如,要将数据D发送给具有公钥PK的另一个人:

    1. 发送Ek(D)(用密钥K用对称算法加密的D)
    2. 也发送Epk(K)(使用RSA RSA加密的K)
    3. 另一方打开PK(K)获得K,打开K(D)获得D.

    4. 将数据拆分成小块并分别加密。

    5. 第一种方法是更好的方法,主要有两个原因:

      1. 您不会弄乱数据(加密本身除外)。
      2. 对称加密/解密比公共加密快得多,例如,RC4是数据的简单XOR,而RSA使用的是大功率。
      3. (3。必须有一个原因,为什么PGP如此常见......)

答案 1 :(得分:1)

你为什么不雇用包围?生成对称密钥(AES),使用该AES密钥加密数据,然后使用公共RSA密钥加密AES密钥。发送加密数据以及加密的AES密钥。然后使用私有RSA密钥解密AES密钥,并使用它来解密其余数据。这将允许您加密任何大小的数据。