首頁 >php教程 >php手册 >edauth高效可逆随机加密函数

edauth高效可逆随机加密函数

WBOY
WBOY原創
2016-06-07 11:42:151072瀏覽

edauth高效可逆随机加密函数,性能比Discuz的authcode函数更优化,响应更快
在项目配置文件中定议 'AUTH_KEY'=>'你的密匙字符串'// edauth高效可逆随机加密函数参数解释 <br> // author: PGCao(排骨曹) <br> #------------------------------------------------------------------------#<br> # $string: 明文 或 密文<br> # $operation:true表示加密,false表示解密<br> # $key: 密匙<br> # $outtime:密文有效期, 单位为秒<br> # $entype:加密方式 有md5和sha1两种 加密解密需要统一使用同一种方式才能正确还原明文<br> function edauth($string, $operation = true, $key = '', $outtime = 0, $entype = 'md5'){<br>     $key_length = 4;<br>     if($entype == 'md5'){ //使用md5方式<br>       $long_len = 32; $half_len = 16; $entype == 'md5';<br>     }else{ //使用sha1方式<br>       $long_len = 40; $half_len = 20; $entype == 'sha1';<br>     }<br>     $key = $key != '' ? $key : substr(md5($_SERVER['DOCUMENT_ROOT'].C('AUTH_KEY').$_SERVER['REMOTE_ADDR']),0,30);<br>     $fixedKey = hash($entype, $key); <br>     $egiskeys = md5(substr($fixedKey, $half_len, $half_len)); <br>     $runtoKey = $key_length ? ($operation ? substr(hash($entype, microtime(true)), -$key_length) : substr($string, 0, $key_length)) : ''; <br>     $keys = hash($entype, substr($runtoKey, 0, $half_len) . substr($fixedKey, 0, $half_len) . substr($runtoKey, $half_len) . substr($fixedKey, $half_len));<br>     $string = $operation ? sprintf('%010d', $outtime ? $outtime + time() : 0).substr(md5($string.$egiskeys), 0, $half_len) . $string : base64_decode(substr($string, $key_length)); <br>     $i = 0; $result = ''; <br>     $string_length = strlen($string);<br>     for ($i = 0; $i          $result .= chr(ord($string{$i}) ^ ord($keys{$i % $long_len})); <br>     }<br>     if($operation){<br>       return $runtoKey . str_replace('=', '', base64_encode($result));<br>     }else{<br>         if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, $half_len) == substr(md5(substr($result, $half_len+10).$egiskeys), 0, $half_len)) {<br>             return substr($result, $half_len+10);<br>         } else {<br>             return '';<br>         }<br>     }<br> }以下是测速代码,有兴趣的PR可以试用authcode函数进行比较,同一页面用得越多越能体现出前后性能区别<?php <br /> //测试处理速度<br> echo "<h3>edauth函数</h3>";<br> $_runtime_ = microtime(true);<br> $str = "生产不同密文后能解密!^_^ ";<br> //for($i=0;$i //$str .= "OK";<br> $key = "12***89";<br> echo "<b>明文:</b>".$str."<hr>";<br> echo "<b>密文:</b>".$out = edauth($str, true, $key);<br> echo "<hr> <b>原文:</b>".edauth($out, false, $key);<br> echo "<hr> <b>明文:</b>".$str."<hr>";<br> echo "<b>密文:</b>".$out = edauth($str, true, $key);<br> echo "<hr> <b>原文:</b>".edauth($out, false, $key);<br> $runtime = number_format((microtime(true) - $_runtime_), 6);<br> echo '<hr>Runtime '. $runtime .' second(s)';<br> ?>

AD:真正免费,域名+虚机+企业邮箱=0元

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn