01 | <? |
02 |
03 | class encryptCalss |
04 | { |
05 | var $key=12; |
06 | function encode($txt){ |
07 | for($i=0;$i<strlen($txt);$i++){ |
08 | $txt[$i]=chr(ord($txt[$i])+$this->key); |
09 | } |
10 | return $txt=urlencode(base64_encode(urlencode($txt))); |
11 | } |
12 | function decode($txt){ |
13 | $txt=urldecode(base64_decode($txt)); |
14 | for($i=0;$i<strlen($txt);$i++){ |
15 | $txt[$i]=chr(ord($txt[$i])-$this->key); |
16 | } |
17 | return $txt; |
18 | } |
19 | } |
20 |
21 | ?> |
01 | <?php |
02 | /** |
03 | * |
04 | * @param string $string 原文或者密文 |
05 | * @param string $operation 操作(ENCODE | DECODE), 默认为 DECODE |
06 | * @param string $key 密钥 |
07 | * @param int $expiry 密文有效期, 加密时候有效, 单位 秒,0 为永久有效 |
08 | * @return string 处理后的 原文或者 经过 base64_encode 处理后的密文 |
09 | * @example |
10 | * $a = authcode('abc', 'ENCODE', 'key'); |
11 | * $b = authcode($a, 'DECODE', 'key'); // $b(abc) |
12 | * |
13 | * $a = authcode('abc', 'ENCODE', 'key', 3600); |
14 | * $b = authcode('abc', 'DECODE', 'key'); // 在一个小时内,$b(abc),否则 $b 为空 |
15 | */ |
16 | function authcode($string,$operation='DECODE',$key='',$expiry=0){ |
17 |
18 | $ckey_length=4; |
19 |
20 | $key=md5($key ? $key:\"kalvin.cn\"); |
21 | $keya=md5(substr($key,0,16)); |
22 | $keyb=md5(substr($key,16,16)); |
23 | $keyc=$ckey_length ? ($operation=='DECODE' ?substr($string,0,$ckey_length):substr(md5(microtime()),-$ckey_length)):''; |
24 |
25 | $cryptkey=$keya.md5($keya.$keyc); |
26 | $key_length=strlen($cryptkey); |
27 |
28 | $string=$operation=='DECODE' ?base64_decode(substr($string,$ckey_length)):sprintf('%010d',$expiry ?$expiry+time():0).substr(md5($string.$keyb),0,16).$string; |
29 | $string_length=strlen($string); |
30 |
31 | $result=''; |
32 | $box=range(0,255); |
33 |
34 | $rndkey=array(); |
35 | for($i=0;$i<=255;$i++){ |
36 | $rndkey[$i]=ord($cryptkey[$i%$key_length]); |
37 | } |
38 |
39 | for($j=$i=0;$i<256;$i++){ |
40 | $j=($j+$box[$i]+$rndkey[$i])%256; |
41 | $tmp=$box[$i]; |
42 | $box[$i]=$box[$j]; |
43 | $box[$j]=$tmp; |
44 | } |
45 |
46 | for($a=$j=$i=0;$i<$string_length;$i++){ |
47 | $a=($a+1)%256; |
48 | $j=($j+$box[$a])%256; |
49 | $tmp=$box[$a]; |
50 | $box[$a]=$box[$j]; |
51 | $box[$j]=$tmp; |
52 | $result.=chr(ord($string[$i]) ^ ($box[($box[$a]+$box[$j])%256])); |
53 | } |
54 |
55 | if($operation=='DECODE'){ |
56 | if((substr($result,0,10)==0||substr($result,0,10)-time()>0)&&substr($result,10,16)==substr(md5(substr($result,26).$keyb),0,16)){ |
57 | returnsubstr($result,26); |
58 | }else{ |
59 | return''; |
60 | } |
61 | }else{ |
62 | return$keyc.str_replace('=','',base64_encode($result)); |
63 | } |
64 |
65 | } |
66 | ?> |