加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

PHP encod64加密函数示例

发布时间:2020-05-25 05:19:23 所属栏目:PHP 来源:互联网
导读:PHP encod64加密函数示例

对PHP encod64加密函数代码感兴趣的小伙伴,下面一起跟随脚本之家 jb51.cc的小编两巴掌来看看吧!
encode64可以获得最短的由26个英文大小写字母数字加上"-_"两个符号编码的数据,这个个字串可以在网络自由传输,无需考虑被自动转码引起的混乱. 缺点: 对于大字串太慢了,原因不明,可能PHP脚本本身就是慢,所以它内置 很多函数,这些函数如果用脚本来实现是不可忍受的. 而JavaScript就没这个问题,脚本的速度快的多.


/**
 * PHP encod64加密函数代码
 *
 * @param 
 * @arrange 512-笔记网: www.www.jb51.cc
 **/
<?PHP
//encode64编码可以同时取代encodeURI,encodeURIComponent,endode函数,因为选取的这些字符都不会被编码.
class Encode64{
	function code($str) {
		$KEY = 'PaAwO65goUf7IK2vi9-xq8cFTEXLCDY1Hd3tV0ryzjbpN_BlnSs4mGRkQWMZJeuh';
		$a = StrToBytes($str);
		$len = count($a);
		$res = $len % 3; 
		$s = "";$i = 2;$v = 0;
		for (; $i < $len; $i += 3) {
			$v = $a[$i - 2] + ($a[$i - 1] << 8) + ($a[$i] << 16);
			$s .= $KEY[$v & 0x3f];
			$s .= $KEY[($v >> 6) & 0x3f];
			$s .= $KEY[($v >> 12) & 0x3f];
			$s .= $KEY[($v >> 18)];
		}
		if ($res == 1) {
			$v = $a[$i - 2];
			$s .= $KEY[$v & 0x3f];
			$s .= $KEY[($v >> 6) & 0x3f];
		} else if ($res == 2) {
			$v = $a[$i - 2] + ($a[$i - 1] << 8);
			$s .= $KEY[$v & 0x3f];
			$s .= $KEY[($v >> 6) & 0x3f];
			$s .= $KEY[($v >> 12) & 0x3f];
		}
		return $s;
	}
	function decode($codeStr) {
		$KEY = 'PaAwO65goUf7IK2vi9-xq8cFTEXLCDY1Hd3tV0ryzjbpN_BlnSs4mGRkQWMZJeuh';
		$dic = array();
		for ($i = 0; $i < 64; $i++) {
			$dic[$KEY[$i]] = $i;
		}
		$len = strlen($codeStr);
		$res = $len % 4;
		$cLen = floor($len/4)*3;
		if($res==2) $clen += 1;
		elseif($res==3) $clen += 2;
		$code = range(0,$clen);
		$i = 3;$v = 0; $j = 0;
		for (; $i < $len; $i += 4) {
			$v = $dic[$codeStr[$i - 3]];
			$v += $dic[$codeStr[$i - 2]] << 6;
			$v += $dic[$codeStr[$i - 1]] << 12;
			$v += $dic[$codeStr[$i]] << 18;
			$code[$j] = $v & 0xff;
			$code[$j+1] = ($v >> 8) & 0xff;
			$code[$j+2] = ($v >> 16) & 0xff;
			$j += 3;
		}
		if ($res == 2) {//正确的字节数肯定是余2或3,没有1的情况,如果出现,舍弃.
			$v = $dic[$codeStr[$i - 3]];
			$v += $dic[$codeStr[$i - 2]] << 6;
			$code[$j] = $v & 0xff;
		} else if ($res == 3) {
			$v = $dic[$codeStr[$i - 3]];
			$v += $dic[$codeStr[$i - 2]] << 6;
			$v += $dic[$codeStr[$i - 1]] << 12;
			$code[$j] = $v & 0xff;
			$code[$j+1] = ($v >> 8) & 0xff;
		}
		return BytesToStr($code);
	}
}
function BytesToStr($bytes) {
	$str = '';
	foreach($bytes as $ch) {
		$str .= chr($ch);
	}
	return iconv('UTF-16BE','utf-8',$str);
}
function StrToBytes($str) {
	$str = iconv('utf-8','UTF-16BE',$str);
	$len = strlen($str);
	$bytes = array();
	for($i=0;$i<$len;$i++) {
		$bytes[] =  ord($str[$i]) ;
	}
	return $bytes;
}

/***   来自脚本之家 jb51.cc(jb51.cc)   ***/

 

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读