Skip to content

Too Much Data for RSA Block

🏷️ Java RSA

微信小程序的登录接口参数做了 RSA 加密,但是偶尔会报 too much data for RSA block 错误,日志如下:

java
too much data for RSA block("KoqS3uKBQUFKLogYkqXcEt7RC82iW5ZJpwQVFD/j7BcqWTixey6rYg2jlHK5BrDfbdNCR3tGRHyp07IJ3QzxHq9We0dehmI3yeD7mc28JIlBgHBoZL3NFpdWlqZL9Wqy+zZpKn0p3/UGsBP57wjJaTqcKkDn3Z+JdXZWzb58a9OuIS8N/1jn3BCIBpNqjhZNvSJZGyUxZ6LhRRbS3LyugY4VUDTVz6dRFJhfk2NdVCceZ5zFzmJFZtZ4NBlS9r7sW0t5mq2HTd6Hj1tQiiAmyFSa0IJTihOV1MeWTj5c0H2djLga53zhKRPsPKuUaWUhkH7nQ1alrzC5rORP87JLNbEb2mJj0ZqOIJgnqKaExEu3ebgd0wMacJ240dCz40UVpOjzfZY8iXTVPZBZiO6zjJQ+uJI+KXTBDRKr4MSVcH+tJXQPxLA9YHvVmOdT4G2jQShq8c4XW2llrAr8/FfKaFNtRJrZpYMpugQBdlo3ZG+W4Ua9y/oYqONrmKDJk+HKwQ7GM0H3wKB44nyPB2NMt0YqGBe+jk3K7/CqOipSPH3ttfK3PY39zbxHQOR4CMvDpZup6YtLOYSWd8PSo7v1M1F4TESaNbGs8bU8aPbWA++XOoZN1sEJk5mI7ydNInrZSlXPFIXx7NpYUydKL1I62nfrGQCUmQDw9A0PoCu9g/Q="
java.lang.ArrayIndexOutOfBoundsException: too much data for RSA block
  at org.bouncycastle.jcajce.provider.asymmetric.rsa.CipherSpi.engineDoFinal(Unknown Source)
  at javax.crypto.Cipher.doFinal(Cipher.java:2168)

使用上面日志中打印的 Body 内容做解密测试时,结果始终是对的,没有报错。
另外还怀疑会不会在多线程的情况下才会出问题,写了段多线程的测试代码,仍然是对的。

最后才发现,日志中双引号 " 也是请求 Body 里的字符,首尾多了两个双引号才导致解密失败的

暂时还不知道为什么有时候会多出来这两个双引号,怀疑是前端在哪里对 requestbody 做了 JSON.stringify 操作导致的。

解决方法很简单,去掉首尾多余的双引号再解密就可以了。