RSA解密失败:javax.crypto.BadPaddingException : Decryption error

一、由于项目需要,前端把密码用RSA加密后传输到后端,后端进行RSA解密后再与数据库中的密码进行对比,接受到前端传过来的加密后的密码,在进行解密的时候出现错误了:
javax.crypto.BadPaddingException : Decryption error
二、仔细对比了前后端的RSA加密解密的设置,发现是一样的,本来以为是公钥和私钥的问题,换了不少公钥私钥之后还是有问题。然后无意中发现前端传过来的加密后的字符串和后端使用RSA加密后的字符串不一样。详细对比后,发现是字符串中的加号+变成了空白字符。

前端传过来的加密后的字符串:

Af2bSRu1enQBB2yzOVUEm/ImxycRleTrk4LJnc5OLgHawjFJevVdao44neAi9NhPLSqKDftRI1YZBbPL25pAdA72hykaroR7P/6o0yQ7mPguQPNsIBClLHBo5 w10ojajB3bYG68kvDoVJqsMrss wRkFjktZRssJw7M80Uxw0s=

后端使用RSA加密后的字符串:

Af2bSRu1enQBB2yzOVUEm/ImxycRleTrk4LJnc5OLgHawjFJevVdao44neAi9NhPLSqKDftRI1YZBbPL25pAdA72hykaroR7P/6o0yQ7mPguQPNsIBClLHBo5+w10ojajB3bYG68kvDoVJqsMrss+wRkFjktZRssJw7M80Uxw0s=

对比结果:
RSA解密失败:javax.crypto.BadPaddingException : Decryption error_第1张图片

三、在接收到加密后的字符串之后,先进行了替换,把空格替换成加号,然后就可以了。加密后的字符串的一些特殊的字符的含义:
    • URL 中+号表示空格 %2B
  1. 空格URL中的空格可以用+号或者编码 %20
  2. / 分隔目录和子目录 %2F
  3. ? 分隔实际的 URL 和参数 %3F
  4. % 指定特殊字符 %25
  5. #表示书签 %23
  6. & URL 中指定的参数间的分隔符 %26
  7. = URL 中指定参数的值 %3D

还有其他的方法可以避免出现这个问题的,详情可以参考文章:

  1. javax.crypto.BadPaddingException : Decryption error
  2. RSA解密报 Decryption error
四、总结:如果有疑问可以直接留言评论,如果觉得对你有帮助,可以小小的赞赏一杯奶茶钱,谢谢!!

在这里插入图片描述

你可能感兴趣的:(Java,前端,rsa,加密解密)