我正在使用 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 (这是推荐的方法)。
这将要求您:
- 生成对称 key
- 使用对称 key 加密数据
- 使用 rsa 加密对称 key
- 发送加密 key 和数据
- 使用 rsa 解密加密的对称 key
- 使用对称 key 解密数据
- 完成:)
关于java - 收到 IllegalBlockSizeException : Data must not be longer than 256 bytes when using rsa,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60419407/