{"id":389,"date":"2010-05-03T08:58:21","date_gmt":"2010-05-03T08:58:21","guid":{"rendered":""},"modified":"2010-05-03T08:58:21","modified_gmt":"2010-05-03T08:58:21","slug":"389","status":"publish","type":"post","link":"https:\/\/www.poloo.org\/?p=389","title":{"rendered":"\u5f88\u8d5e\u7684PHP\u5b57\u7b26\u4e32\u52a0\u5bc6\u51fd\u6570"},"content":{"rendered":"<p>\u6700\u8fd1\uff0c \u4ecediscuz\u91cc\u9762\u53d1\u73b0\u4e86\u4e00\u4e2a\u5f88\u725b\u7684\u52a0\u5bc6\u89e3\u5bc6\u51fd\u6570\u3002<\/p>\n<p>\u6b64\u51fd\u6570\u7684\u5389\u5bb3\u4e4b\u5904\u5728\u4e8e\u53ef\u4ee5\u5728\u6307\u5b9a\u65f6\u95f4\u5185\u52a0\u5bc6\u8fd8\u539f\u5b57\u7b26\u4e32\uff0c\u8d85\u65f6\u65e0\u6cd5\u8fd8\u539f<\/p>\n<p>\u8fd9\u6837\u6211\u4eec\u5c31\u53ef\u4ee5\u62ff\u6b64\u51fd\u6570\u6765\u505a\u5f88\u591a\u7528\u9014\u4e86\uff0c\u6bd4\u5982\uff1a\u5355\u70b9\u767b\u5f55\u7684token\u52a0\u5bc6\u4f20\u8f93\u5566\uff0c\u4e34\u65f6\u5bc6\u7801\u5566\u7b49\u7b49<\/p>\n<p><code><br \/>\/**<br \/>&nbsp;&nbsp; * @param string $string \u539f\u6587\u6216\u8005\u5bc6\u6587<br \/>&nbsp;&nbsp; * @param string $operation \u64cd\u4f5c(ENCODE | DECODE), \u9ed8\u8ba4\u4e3a DECODE<br \/>&nbsp;&nbsp; * @param string $key \u5bc6\u94a5<br \/>&nbsp;&nbsp;&nbsp;&nbsp;* @param int $expiry \u5bc6\u6587\u6709\u6548\u671f, \u52a0\u5bc6\u65f6\u5019\u6709\u6548\uff0c \u5355\u4f4d \u79d2\uff0c0 \u4e3a\u6c38\u4e45\u6709\u6548<br \/>&nbsp;&nbsp;&nbsp;&nbsp;* @return string \u5904\u7406\u540e\u7684 \u539f\u6587\u6216\u8005 \u7ecf\u8fc7 base64_encode \u5904\u7406\u540e\u7684\u5bc6\u6587<br \/>&nbsp;&nbsp;&nbsp;&nbsp;*<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;* @example<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;$a = authcode('abc', 'ENCODE', 'key');<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;$b = authcode($a, 'DECODE', 'key');&nbsp;&nbsp;\/\/ $b(abc)<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;$a = authcode('abc', 'ENCODE', 'key', 3600);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;&nbsp;$b = authcode('abc', 'DECODE', 'key'); \/\/ \u5728\u4e00\u4e2a\u5c0f\u65f6\u5185\uff0c$b(abc)\uff0c\u5426\u5219 $b \u4e3a\u7a7a<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*\/<br \/> function authcode($string, $operation = 'DECODE', $key = '', $expiry = 3600) {<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ckey_length = 4;&nbsp;&nbsp; <br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ \u968f\u673a\u5bc6\u94a5\u957f\u5ea6 \u53d6\u503c 0-32;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ \u52a0\u5165\u968f\u673a\u5bc6\u94a5\uff0c\u53ef\u4ee5\u4ee4\u5bc6\u6587\u65e0\u4efb\u4f55\u89c4\u5f8b\uff0c\u5373\u4fbf\u662f\u539f\u6587\u548c\u5bc6\u94a5\u5b8c\u5168\u76f8\u540c\uff0c\u52a0\u5bc6\u7ed3\u679c\u4e5f\u4f1a\u6bcf\u6b21\u4e0d\u540c\uff0c\u589e\u5927\u7834\u89e3\u96be\u5ea6\u3002<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ \u53d6\u503c\u8d8a\u5927\uff0c\u5bc6\u6587\u53d8\u52a8\u89c4\u5f8b\u8d8a\u5927\uff0c\u5bc6\u6587\u53d8\u5316 = 16 \u7684 $ckey_length \u6b21\u65b9<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \/\/ \u5f53\u6b64\u503c\u4e3a 0 \u65f6\uff0c\u5219\u4e0d\u4ea7\u751f\u968f\u673a\u5bc6\u94a5<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $key = md5($key ? $key : EABAX::getAppInf('KEY'));<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $keya = md5(substr($key, 0, 16));<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $keyb = md5(substr($key, 16, 16));<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $cryptkey = $keya.md5($keya.$keyc);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $key_length = strlen($cryptkey);<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $string = $operation == 'DECODE' ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $string_length = strlen($string);<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $result = '';<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $box = range(0, 255);<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $rndkey = array();<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for($i = 0; $i &lt;= 255; $i++) {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $rndkey[$i] = ord($cryptkey[$i % $key_length]);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for($j = $i = 0; $i &lt; 256; $i++) {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $j = ($j + $box[$i] + $rndkey[$i]) % 256;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $tmp = $box[$i];<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $box[$i] = $box[$j];<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $box[$j] = $tmp;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for($a = $j = $i = 0; $i &lt; $string_length; $i++) {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $a = ($a + 1) % 256;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $j = ($j + $box[$a]) % 256;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $tmp = $box[$a];<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $box[$a] = $box[$j];<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $box[$j] = $tmp;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if($operation == 'DECODE') {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() &gt; 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return substr($result, 26);<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return '';<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $keyc.str_replace('=', '', base64_encode($result));<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<\/p>\n<p>&nbsp;&nbsp;&nbsp;&nbsp; }<br \/><\/code><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6700\u8fd1\uff0c \u4ecediscuz\u91cc\u9762\u53d1\u73b0\u4e86\u4e00\u4e2a\u5f88\u725b\u7684\u52a0\u5bc6\u89e3\u5bc6\u51fd\u6570\u3002 \u6b64\u51fd\u6570\u7684\u5389&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[18],"tags":[],"class_list":["post-389","post","type-post","status-publish","format-standard","hentry","category-Php"],"_links":{"self":[{"href":"https:\/\/www.poloo.org\/index.php?rest_route=\/wp\/v2\/posts\/389","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.poloo.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.poloo.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.poloo.org\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.poloo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=389"}],"version-history":[{"count":0,"href":"https:\/\/www.poloo.org\/index.php?rest_route=\/wp\/v2\/posts\/389\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.poloo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=389"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.poloo.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=389"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.poloo.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}