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 编解码

你可能感兴趣的:(Web)