加密解密函数 ~~~ /** * 字符串加密、解密函数 * @param string $txt 字符串 * @param string $operation ENCODE为加密,DECODE为解密,可选参数,默认为ENCODE, * @param string $key 密钥:数字、字母、下划线 * @param string $expiry 过期时间 * @return string */ function encry_code($string, $operation = 'ENCODE', $key = '', $expiry = 0) { $ckey_length = 4; $key = md5($key != '' ? $key : config('encry_key')); $keya = md5(substr($key, 0, 16)); $keyb = md5(substr($key, 16, 16)); $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length) : substr(md5(microtime()), -$ckey_length)) : ''; $cryptkey = $keya . md5($keya . $keyc); $key_length = strlen($cryptkey); $string = $operation == 'DECODE' ? base64_decode(strtr(substr($string, $ckey_length), '-_', '+/')) : sprintf('%010d', $expiry ? $expiry + time() : 0) . substr(md5($string . $keyb), 0, 16) . $string; $string_length = strlen($string); $result = ''; $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 == 'DECODE') { 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 ''; } } else { return $keyc . rtrim(strtr(base64_encode($result), '+/', '-_'), '='); } } ~~~ onethink提供加密解密 ~~~ /** * 系统非常规MD5加密方法 * @param string $str 要加密的字符串 * @return string */ function think_ucenter_md5($str, $key = 'ThinkUCenter'){ return '' === $str ? '' : md5(sha1($str) . $key); } /** * 系统加密方法 * @param string $data 要加密的字符串 * @param string $key 加密密钥 * @param int $expire 过期时间 (单位:秒) * @return string */ function think_ucenter_encrypt($data, $key, $expire = 0) { $key = md5($key); $data = base64_encode($data); $x = 0; $len = strlen($data); $l = strlen($key); $char = ''; for ($i = 0; $i < $len; $i++) { if ($x == $l) $x=0; $char .= substr($key, $x, 1); $x++; } $str = sprintf('%010d', $expire ? $expire + time() : 0); for ($i = 0; $i < $len; $i++) { $str .= chr(ord(substr($data,$i,1)) + (ord(substr($char,$i,1)))%256); } return str_replace('=', '', base64_encode($str)); } /** * 系统解密方法 * @param string $data 要解密的字符串 (必须是think_encrypt方法加密的字符串) * @param string $key 加密密钥 * @return string */ function think_ucenter_decrypt($data, $key){ $key = md5($key); $x = 0; $data = base64_decode($data); $expire = substr($data, 0, 10); $data = substr($data, 10); if($expire > 0 && $expire < time()) { return ''; } $len = strlen($data); $l = strlen($key); $char = $str = ''; for ($i = 0; $i < $len; $i++) { if ($x == $l) $x = 0; $char .= substr($key, $x, 1); $x++; } for ($i = 0; $i < $len; $i++) { if (ord(substr($data, $i, 1)) < ord(substr($char, $i, 1))) { $str .= chr((ord(substr($data, $i, 1)) + 256) - ord(substr($char, $i, 1))); }else{ $str .= chr(ord(substr($data, $i, 1)) - ord(substr($char, $i, 1))); } } return base64_decode($str); } ~~~ encrypt加密解密 ~~~ //encrypt加密decrypt解密,支持js function encode_base64($sData){ $sBase64 = base64_encode($sData); return strtr($sBase64, '+/', '-_'); } function decode_base64($sData){ $sBase64 = strtr($sData, '-_', '+/'); return base64_decode($sBase64); } function encrypt($sData, $sKey){ $sResult = ''; for($i=0;$i<strlen($sData);$i++){ $sChar = substr($sData, $i, 1); $sKeyChar = substr($sKey, ($i % strlen($sKey)) - 1, 1); $sChar = chr(ord($sChar) + ord($sKeyChar)); $sResult .= $sChar; } return encode_base64($sResult); } function decrypt($sData, $sKey){ $sResult = ''; $sData = decode_base64($sData); for($i=0;$i<strlen($sData);$i++){ $sChar = substr($sData, $i, 1); $sKeyChar = substr($sKey, ($i % strlen($sKey)) - 1, 1); $sChar = chr(ord($sChar) - ord($sKeyChar)); $sResult .= $sChar; } return $sResult; } ~~~