• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)_php技巧

php 搞代码 4年前 (2022-01-26) 19次浏览 已收录 0个评论

这样我们就可以拿此函数来做很多用途了,比如:单点登录的token加密传输啦,临时密码啦等等

 <BR>/** <BR>* @param string $string 原文或者密文 <BR>* @param string $operation 操作(ENCODE | DECODE), 默认为 DECODE <BR>* @param string $key 密钥 <BR>* @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效 <BR>* @return string 处理后的 原文或者 经过 base64_encode 处理后的密文 <BR>* <BR>* @example <BR>* <BR>* $a = authcode('abc', 'ENCODE', 'key'); <BR>* $b = authcode($a, 'DECODE', 'key'); // $b(abc) <BR>* <BR>* $a = authcode('abc', 'ENCODE', 'key', 3600); <BR>* $b = authcode('abc', 'DECODE', 'key'); // 在一个小时内,$b(abc),否则 $b 为空 <BR>*/ <BR>function authcode($string, $operation = 'DECODE', $key = '', $expiry = 3600) { <BR>$ckey_length = 4; <BR>// 随机密钥长度 取值 0-32; <BR>// 加入随机密钥,可以令密文无任何规律,即便是原文和密钥完全相同,加密结果也会每次不同,增大破解难度。 <BR>// 取值越大,密文变动规律越大,密文变化 = 16 的 $ckey_length 次方 <BR>// 当此值为 0 时,则不产生随机密钥 <BR>$key = md5($key ? $key : EABAX::getAppInf('KEY')); <BR>$keya = md5(substr($key, 0, 16)); <BR>$keyb = md5(substr($key, 16, 16)); <BR>$keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : ''; <BR>$cryptkey = $keya.md5($keya.$keyc); <BR>$key_length = strlen($cryptkey); <BR>$string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string; <BR>$string_length = strlen($<mark>(本文来)源gaodaimacom搞#^代%!码&网(</mark><pre>搞gaodaima代码

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.str_replace(‘=’, ”, base64_encode($result));
}
}


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP 字符串加密函数(在指定时间内加密还原字符串,超时无法还原)_php技巧
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址