PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)
这样我们就可以拿此函数来做很多用途了,比如:单点登录的token加密传输啦,临时密码啦等等
<div class="codetitle"><a style="CURSOR: pointer" data="23832" class="copybut" id="copybut23832" onclick="doCopy('code23832')"> 代码如下:
<div class="codebody" id="code23832">
/*
@p
aram string $string 原文或者密文
@param string $operation 操作(ENCODE | DECODE),默认为 DECODE
@p
aram string $key 密钥
@param int $expiry 密文有效期,加密时候有效, 单位 秒,0 为永久有效
@return string 处理后的 原文或者 经过 base64_encode 处理后的密文
@example
$a = authcode('abc','ENCODE','key');
$b = authcode($a,'DECODE','key'); // $b(abc)
$a = authcode('abc','key',3600);
$b = authcode('abc','key'); // 在
一个小时内,$b(abc),否则 $b 为空
*/
function authcode($string,$operation = 'DECODE',$key = '',$expiry = 3600) {
$ckey_length = 4;
//
随机密钥长度 取值 0-32;
// 加入
随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。
// 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方
// 当此值为 0 时,则不产生
随机密钥
$key = md5($key ? $key : EABAX::getAppInf('KEY'));
$keya = md5(substr($key,16));
$keyb = md5(substr($key,16,16));
$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string,$ckey_length): substr(md5(microtime()),-$ckey_length)) : '';
$cryptkey = $keya.md5($keya.$keyc);
$key_length = strlen($cryptkey);
$string = $operation == 'DECODE' ? base64_decode(substr($string,$ckey_length)) : sprintf('%010d',$expiry ? $expiry + time() : 0).substr(md5($string.$keyb),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,10) == 0 || substr($result,10) - time() > 0) && substr($result,10,16) == substr(md5(substr($result,26).$keyb),16)) {
return substr($result,26);
} else {
return '';
}
} else {
return $keyc.str_replace('=','',base64_encode($result));
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。