java - 收到 IllegalBlockSizeException : Data must not be longer than 256 bytes when using rsa

标签 java rsa encryption

我正在使用 rsa key 来加密一个长字符串,我将发送到我的服务器(将使用服务器的公钥和我的私钥对其进行加密),但它会抛出一个异常,例如 javax.crypto.IllegalBlockSizeException: Data Must不能超过256字节 我觉得到目前为止我还没有正确理解 rsa 的工作原理(使用内置库是造成这种情况的原因)。
有人可以解释一下为什么会抛出这个异常吗?难道根本不可能发送加密的长字符串吗?

最佳答案

The RSA algorithm can only encrypt data that has a maximum byte length of the RSA key length in bits divided with eight minus eleven padding bytes, i.e. number of maximum bytes = key length in bits / 8 - 11.

所以基本上你可以将 key 长度除以 8 -11(如果有填充)。例如,如果您有 2048 位 key ,则可以加密 2048/8 = 256 字节(如果有填充,则为 11 字节)。因此,要么使用更大的 key ,要么使用对称 key 加密数据,然后使用 rsa 加密该 key (这是推荐的方法)。

这将要求您:

  1. 生成对称 key
  2. 使用对称 key 加密数据
  3. 使用 rsa 加密对称 key
  4. 发送加密 key 和数据
  5. 使用 rsa 解密加密的对称 key
  6. 使用对称 key 解密数据
  7. 完成:)

关于java - 收到 IllegalBlockSizeException : Data must not be longer than 256 bytes when using rsa,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60419407/

相关文章:

encryption - 通过字符串设置caffe net参数

python - 在 python 中加密 PDF

java - 使用 Javac/Ant 编译 1 个文件也会编译指定文件中的导入文件/类

python - 为什么我的 RSA 代码中的加密/解密不起作用?

java - 如何在 Maven 中获取特定分支的 SVN 内部版本号

java - 如何从 base64 编码的字符串构造 java.security.PublicKey 对象?

java - 使用 rsa 公钥字符串(不是文件),当我加密时,出现错误 "invalid key format"

android - 问题外包RSA加解密

java - 鼠标监听器没有响应

java - 无法启动 Tomcat 服务器实例