微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐