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)   ***/

 

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...