Java / JCE:解密用RSA加密的“长”消息

时间:2008-11-17 12:06:45

标签: java rsa encryption jce

我有一个包含在byte []中的消息,用“RSA / ECB / PKCS1Padding”加密。为了解密它,我创建了一个Cipher c并用

启动它
c = Cipher.getInstance("RSA/ECB/PKCS1Padding");

直到现在我只使用 doFinal()方法解密了小消息,并使用解密的字节返回byte []。

c.init(Cipher.DECRYPT_MODE, privateKey);
byte[] decryptetBytes = c.doFinal(encryptedBytes);

但是在这种情况下数据更大(大约500字节), doFinal() -method抛出异常(javax.crypto.IllegalBlockSizeException:数据不得超过128个字节) 。我想我需要使用 update() - 方法,但我无法弄清楚如何让它正常工作。这是怎么做到的?

2 个答案:

答案 0 :(得分:4)

我认为使用RSA加密除了密钥传输之外的任何东西都是滥用。

为对称密码生成新密钥,并使用该密钥加密批量数据。然后使用RSA加密密钥。将对称加密的密文与非对称加密的内容加密密钥一起发送给收件人。

答案 1 :(得分:1)

像埃里克森说的那样,

您应该加密的步骤是:

  1. 生成RSA密钥对(或从密钥库中检索公钥)
  2. 生成对称密钥(AES)
  3. 使用AES密钥加密数据
  4. 使用公共RSA密钥加密AES密钥
  5. 存储(或发送给拥有私钥的人)加密的AES密钥和AES加密数据
  6. 要解密:

    1. 获取与用于加密的密钥对相关联的私钥
    2. 使用私钥解密AES密钥
    3. 使用AES密钥解密数据
    4. 使用数据