因为我使用公钥,使用php的 openssl 加密之后的资料 base64_encode()字符串,然后放入请求 url 中当作参数,urlencode(base64_encode()),然后用 urldecode() 传过来的参数,出现+和 =丢失的情况,导致 openssl 解密base64_decode()的字符串失败。

我们知道Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一,看好是编码,并不是加密。 编码过程不解释了,Base64要求把每三个8Bit的字节转换为四个6Bit的字节(38 = 46 = 24),然后把6Bit再添两位高位0,组成四个8Bit的字节,也就是说,转换后的字符串理论上将要比原来的长1/3。

格式是大小写字母、数字、“=”号、“+”号和“/”号 但“=”等号最多只有两个 正则匹配就是 【 [a-zA-Z0-9=+/]+ 】 所以看到有大小写字母的字符串并且有一个或两个等号结束的。基本可以判断是base64编码 base64不适合直接放在URL里作为参数传输,发现base64编码中有“/” “=”符号。为解决此问题,可采用一种用于URL的改进Base64编码,它不在末尾填充'='号,并将标准Base64中的“+”和“/”分别改成了“_”和“-”,这样就免去了在URL编解码和数据库存储时所要作的转换。

通过下面的函数,完美解决base64编码url的问题了:

//url base64编码

function urlsafe_b64encode($string) {

$data = base64_encode($string);

$data = str_replace(array('+','/','='),array('-','_',''),$data);

return $data;

}

//url base64解码

function urlsafe_b64decode($string) {

$data = str_replace(array('-','_'),array('+','/'),$string);

$mod4 = strlen($data) % 4;

if ($mod4) {

$data .= substr('====', $mod4);

}

return base64_decode($data);

}

References

php b64encode,[转]PHP base64_encode 在URL地址参数编码上使用相关推荐

  1. 对象转为url地址参数

    对象转为url地址参数 ajax请求中url地址上参数的封装函数 //用&拼接对象成字符串 function getParams(params) {let paramStr = '';Obje ...

  2. 获取url地址参数的方法

    获取url地址参数的方法 // key :参数名 function getUrlParams(key){var reg = new RegExp(key + '=([^&]*))');var ...

  3. js获取url地址参数

    一.js获取url地址栏参数 1.传入url地址(获取某个参数) console.log(getQueryVariable('aid', "http://10.179.91.238:8000 ...

  4. iOS开发中,通过URL地址获取网络上的图片

    在iOS开发中,我们有时会通过图片的URL地址来获取网上的图片,下面是一个方法实现: /** 通过URL地址从网上获取图片 */ -(UIImage *) getImageFromURL:(NSStr ...

  5. 使用js修改url地址参数并修改url地址

    注: 微信小程序和公众号内屏蔽了  eval() 函数,需要用其他方法解决 修改浏览器地址参数: function changeURLArg(url,arg,arg_val){var pattern= ...

  6. Js获取Url地址参数的几种方法

    方法一 URLSearchParams()函数 geturlparam(){let that=this// window.location.href 获取地址let url = 'https://xx ...

  7. Angular URL地址参数改变,视图不更新的解决办法(监听URL变化,重新加载数据方法)

    import { ActivatedRoute,Router,NavigationEnd } from '@angular/router'; //钩子(组件组装完成之后调用的方法,仅调用一次)ngAf ...

  8. 关于HTTP GET请求的url中文参数编码

    场景:前端用JS构造了一个GET请求,携带了一个中文的参数,通过Spring MVC传到后台以后解析中文是乱码. 1. 发送请求,从浏览器中捕获到http的请求内容如下: 1 Remote Addre ...

  9. request获取url的参数编码问题

    1.设为utf-8编码 request.getParameter("Params")).getBytes("iso-8859-1"), "utf-8& ...

最新文章

  1. rac安装grid报INS-41112错误
  2. 2021 开源社年度报告:开心开源
  3. 有没有更好的方法在JavaScript中执行可选的函数参数? [重复]
  4. 通过Windows组策略限制证书组织流氓软件的安装运行
  5. java是否存在引用传递_Java永远不会传递引用,对吧?
  6. Windows命令行优美化:FluentTerminal安装与配置
  7. Windows下载安装kafka
  8. 关于土地分类格式互转、土地利用转移矩阵、变化图谱计算详解
  9. 现代西班牙语第一册 单词表
  10. MyEclipse详解
  11. java 英语单词拼写训练_java 英文单词拼写纠正框架(Word Checker)
  12. sm是什么职位_销售职位sm. asm. sr. dsr分别是什麽意思
  13. 【RDMA】IBV_SEND_INLINE和IBV_SEND_SIGNALED的原理|RDMA小消息通信性能优化
  14. u盘中毒了怎么恢复文件?一分钟了解恢复方法
  15. php 中文 验证码,php 验证码 支持中文验证码
  16. Android桌面老是跳广告,电脑桌面老是弹出广告怎么办?简单3步轻松屏蔽!
  17. 1.11.ARM的37个寄存器详解
  18. 文献简读——大肠中胰蛋白酶降解共生菌的鉴定【Identification of trypsin-degrading commensals in the large intestine】
  19. 基于JAVA网上蛋糕订购系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  20. 训练神经网络的详细步骤,人工神经网络训练过程

热门文章

  1. css样式:文字led效果(走马灯、轮播)
  2. nginx location 配置
  3. 大数据笔记(二十一)——NoSQL数据库之Redis
  4. SpringCloud(一)
  5. 如何简单解释 MapReduce算法
  6. 自定义插入子串、删除子串、替换子串函数
  7. 如何完成dedecms外部数据库调用|跨数据库数据调用
  8. 字符串json转成json对象
  9. 面试题30.最小的k个数
  10. Zabbix监控之检测程序日志中错误发生的次数