当前位置: 首页 > 面试题库 >

得到一个IllegalBlockSizeException:使用rsa时数据不能超过256个字节

姚子石
2023-03-14
问题内容

我正在使用rsa密钥对要发送到服务器的长字符串进行加密(将使用服务器的公钥和我的私钥对它进行加密),但是它抛出一个异常,就像javax.crypto.IllegalBlockSizeException: Data must not be longer than 256 bytes 我觉得到目前为止我还不了解rsa的工作原理一样(使用内置库是造成这种情况的原因)。
可以请一个人解释为什么抛出此异常。根本不可能发送加密的长字符串吗?


问题答案:

RSA算法只能加密具有以字节为单位的RSA密钥长度的最大字节长度除以8减去11的填充字节的数据,即最大字节数=以位为单位的密钥长度/ 8-11。

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

这将要求您:

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


 类似资料:
  • 我使用rsa密钥加密一个长字符串,并将它发送到我的服务器(将使用服务器的公钥和私钥加密它),但它会引发类似我觉得到目前为止我还没有正确理解rsa的工作方式(使用内置库是造成这种情况的原因)。 有人能解释为什么会引发此异常吗?难道根本不可能发送加密的长字符串吗?

  • 我正在用RSA私钥加密我的对称密钥(AES),并用我的公钥解密它。 但是,当我加密数据时,字节长度是16字节,然而,当我解密数据时,它抛出了受影响的错误,解密时字节数据的长度是344。

  • 我创建了以下方法 用于加密 我有很长的xml字符串,使用这两种方法如下 但它给了我数据不得超过256字节时使用rsa 证书被客户端切分,表示签名算法sha256RS。

  • 问题内容: 我正在尝试使用javax.smartcardio 读取智能卡(德语Gesundheitskarte) 在EF“ PD” 的定义中,其长度指定为850字节。内容应该是一个gzip压缩的ISO5589-15编码的XML字符串作为指定在这里 作为CommandAPDU,我发送 获取前256个字节。发送后 我得到下一个256个字节。 但是我如何得到其余的呢? 我怎么知道二进制数据何时结束? 德

  • 我写了一个小聊天和消息对象像 发送到服务器,服务器将其传播给所有注册用户。我想加密message对象看起来像的plaintextmessage部分 我已经在服务器和客户端上构建了我的RSA密钥对。 然后我将服务器公钥编码为字节数组,将此数组编码为Base64编码的字符串,并将其发送给客户端。 客户端和服务器都实现了这些功能 当我试图在客户端加密一条消息,将其发送到服务器并在那里解密时,我得到了错误