Home  >  Article  >  php教程  >  DZX1.5加解密函数authcode分享

DZX1.5加解密函数authcode分享

PHP中文网
PHP中文网Original
2016-05-25 17:13:371018browse

DZX1.5加解密函数authcode分享

<?php
$authkey = &#39;&#39;;
/**
 * @param string $string: 输入的需要加密(或解密)的明文(或密文)
 * @param string $operation: &#39;DECODE&#39;或其它,其中默认表示解密,输入其它表示加密
 * @param string $key: 加解密密钥
 * @param int $expiry: 有效期
 */
function authcode($string, $operation = &#39;DECODE&#39;, $key = &#39;&#39;, $expiry = 0) {
	global $authkey;
	$ckey_length = 4;
	$key = md5($key != &#39;&#39; ? $key : $authkey);
	$keya = md5(substr($key, 0, 16));
	$keyb = md5(substr($key, 16, 16));
	$keyc = $ckey_length ? ($operation == &#39;DECODE&#39; ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : &#39;&#39;;

	$cryptkey = $keya.md5($keya.$keyc);
	$key_length = strlen($cryptkey);

	$string = $operation == &#39;DECODE&#39; ? base64_decode(substr($string, $ckey_length)) : sprintf(&#39;%010d&#39;, $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
	$string_length = strlen($string);

	$result = &#39;&#39;;
	$box = range(0, 255);

	$rndkey = array();
	for($i = 0; $i <= 255; $i++) {
		$rndkey[$i] = ord($cryptkey[$i % $key_length]);
	}

	for($j = $i = 0; $i < 256; $i++) {
		$j = ($j + $box[$i] + $rndkey[$i]) % 256;
		$tmp = $box[$i];
		$box[$i] = $box[$j];
		$box[$j] = $tmp;
	}

	for($a = $j = $i = 0; $i < $string_length; $i++) {
		$a = ($a + 1) % 256;
		$j = ($j + $box[$a]) % 256;
		$tmp = $box[$a];
		$box[$a] = $box[$j];
		$box[$j] = $tmp;
		$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
	}

	if($operation == &#39;DECODE&#39;) {
		if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
			return substr($result, 26);
		} else {
			return &#39;&#39;;
		}
	} else {
		return $keyc.str_replace(&#39;=&#39;, &#39;&#39;, base64_encode($result));
	}

}
$str = &#39;1234&#39;;
$key = &#39;1234&#39;;
echo "明文:".$str;
echo "
";
echo "密钥:".$key;
$encode = authcode($str,&#39;11&#39;,$key);
echo "
";
echo "加密后的密文:".$encode;
echo "
";
$decode = authcode($encode,&#39;DECODE&#39;,$key);
echo "解密后的明文:".$decode;
/*End of php*/

                   


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn