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

Java/JCE:解密;“长”;用RSA加密的消息,java,rsa,encryption,jce,Java,Rsa,Encryption,Jce,我有一条包含在字节[]中的消息,用“RSA/ECB/pkcs1p”加密。为了解密它,我创建了一个密码c并用 c = Cipher.getInstance("RSA/ECB/PKCS1Padding"); 到现在为止,我只使用doFinal()方法对小消息进行了解密,返回一个字节[],其中包含解密的字节 c.init(Cipher.DECRYPT_MODE, privateKey); byte[] decryptetBytes = c.doFinal(encryptedBytes); 但是在这

我有一条包含在字节[]中的消息,用“RSA/ECB/pkcs1p”加密。为了解密它,我创建了一个密码c并用

c = Cipher.getInstance("RSA/ECB/PKCS1Padding");
到现在为止,我只使用doFinal()方法对小消息进行了解密,返回一个字节[],其中包含解密的字节

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

但是在这种情况下,数据更大(大约500字节),doFinal()方法抛出一个异常(javax.crypto.IllegalBlockSizeException:数据长度不能超过128字节)。我想我需要使用update()-方法,但我不知道如何让它正常工作。如何做到这一点?

使用RSA,您只能对大小不超过密钥长度减去填充长度的块进行加密/解密。若你们的数据比你们的密钥长,那个么它可能只是合并在一个数组中,所以你们应该根据你们的密钥的大小把它分成块(128字节表示1024个密钥,并没有填充,我不确定这是否可能)。使用update()不是这里的情况

简单地说,您必须知道这个数组是如何创建的

一般来说,RSA不应用于加密大量数据,因为它相当耗时。应用于加密对称密码的密钥,如AES

请看这里:

我认为对密钥传输以外的任何东西使用RSA加密都是滥用

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

如埃里克森所说

您应该采取的步骤包括:

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

  • 获取与用于加密的密钥对关联的私钥
  • 使用私钥解密AES密钥
  • 使用AES密钥解密数据
  • 使用数据