ThinkPHP 中使用 base64_encode 编码后带左斜杠”/“的安全编码方案

最近公司需要用 PHP 写一个管理系统,框架用的是 ThinkPHP
然后做到一个模块的时候老夫提议采用 RSA 加密

但是大家都知道,RSA 加密后的结果是乱码,所以需要 base64_encode 一下

结果大概就是这个样子了

Cg8qnFW9V0KDdZDO9DjlyA47yUUZ5oCcS4epgW0AQc6lagzeHn
BPHmrHhT4cZ0Ar4Kkdzu5V2GaOormIgvS8Sg5eZDVGhz45DckM
Am3qLja5ArCwOAbyKSXUJOb0T21hVHOtSquNB2Zaj05xKmTsym
Yb5GUdT2Fn7H+bO9EfPpk87ArCwYpA4ow+PbrgyLr+Y5X2qVAr
3hMidgq/Xgee0G0WMSW/27ko3iYEcWygIiyN3i2V2ghJcmz47u
K+oLRt4sqlPw1JSxDTpaVpIEunlq5fLtg+3QFBYoHPIKv5UVbZ
lpobkLcLY3qPGN8bx34eiOC/b+9dumHDu0pyiMRXfw==

然后?然后我就纠结了,因为 ThinkPHP 里面对 URL 参数的定义可以这样:
/name/abc 等同于 ?name=abc

而转出来的 base64 是有左斜杠”/“的,尴尬症都犯了……

好了,正文部分,安全的编码和解码方案:

编码部分:

function urlsafe_b64encode($string) {
   $data = base64_encode($string);
   $data = str_replace(array('+','/','='),array('-','_',''),$data);
   return $data;
}

解码部分:

function urlsafe_b64decode($string) {
   $data = str_replace(array('-','_'),array('+','/'),$string);
   $mod4 = strlen($data) % 4;
   if ($mod4) {
       $data .= substr('====', $mod4);
   }
   return base64_decode($data);
}

方案摘录自:URL 安全的字符串 base64 编解码

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

至天

看心情啦,最好留着自己喝奶茶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值