因为我使用公钥,使用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. pythonqueue函数_如何将函数和参数放入python队列?
  2. c语言考试算法,c语言考试常用算法docx.docx
  3. manjaro kde 21.2.5使用x11桌面可以正常使用搜狗输入法
  4. HTC Desire试玩手记之五(电池出叹号,充电灯不亮)
  5. Java 9 新特性概述
  6. C语言趣味程序百例精解
  7. 将jar文件加到Maven的local repository中
  8. matlab偏微分方程工具箱求解
  9. Azure 基础:Blob Storage
  10. easydarwin 安装_centos服务器安装部署搭建 EasyDarwin【步骤详解】
  11. Rust盒子玩家追踪、库存查询、Rust服务器数据统计功能更新
  12. LabWindows操作Access
  13. 敏捷迭代是什么意思_我认为“敏捷”的方向是第4部分:“敏捷”是什么意思?...
  14. 软件工程之功能性需求和非功能性需求
  15. 苹果 App Store 最贵的 App,评论亮了!!
  16. 地表反射率影响因素_地理简答题气候因素
  17. 新版 CAD 2017 阵列怎么控制角度
  18. linux内核是干什么,linux内核开发工程师
  19. 怎么制作小怪兽打凹凸曼的游戏~
  20. 哪些食物不能一起吃!!!!

热门文章

  1. 2018-04-26java实习面试记录
  2. 集合源码(一)之hashMap、ArrayList
  3. 转帖:对linux中半增加半连接数量和防止服务器被dos攻击
  4. getTime()的00:00:00问题。
  5. 在 SQL Server 的存储过程中调用 Web 服务
  6. (原创)无废话C#设计模式之十七:Chain Of Resp.
  7. TF-Lite极简参考-环境搭建
  8. 一个前端er使用浏览器打印功能快速制作PDF简历
  9. Spark修炼之道——Spark学习路线、课程大纲
  10. Palindrome Number