RSA解密报错、base64加号问题

在与客户端接口联调中遇到RSA解密失败的问题,原因是接收到的Base64编码数据中空格被错误地替换成了加号+。根据W3C标准和RFC2396规范,空格应编码为%20,而不是+。为解决此问题,只需将空格替换回加号即可正常解密。
摘要由CSDN通过智能技术生成

RSA解密报错、base64加号问题

问题

今天和客户端联调接口的时候发现了一个问题。客户端用RSA加密的数据(加密后转为base64传输的),后台解析就会报错。排查了好久。其他的地方也用了同样的操作,也没有问题,但是唯独这个接口就解密不了。

分析

后来通过对比客户端发送的数据,和后台接收的数据,发现接收到的数据把+转为了空格。导致解析不了。

W3C标准规定,当Content-Type为application/x-www-form-urlencoded时,URL中查询参数名和参数值中空格要用加号+替代,所以几乎所有使用该规范的浏览器在表单提交后,URL查询参数中空格都会被编成加号+。
而在另一份规范(RFC 2396,定义URI)里, URI里的保留字符都需转义成%HH格式(Section 3.4 Query Component),因此空格会被编码成%20,加号+本身也作为保留字而被编成%2B,对于某些遵循RFC 2396标准的应用来说,它可能不接受查询字符串中出现加号+,认为它是非法字符。所以一个安全的举措是URL中统一使用%20来编码空格字符。
Java中的URLEncoder本意是用来把字符串编码成application/x-www-form-urlencoded MIME格式字符串,也就是说仅仅适用于URL中的查询字符串部分,但是URLEncoder经常被用来对URL的其他部分编码,它的encode方法会把空格编成加号+,与之对应的是,URLDecoder的decode方法会把加号+和%20都解码为空格

解决方案

我这里直接简单粗暴,将空格替换为加号。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值