<pre class="brush:php;toolbar:false">/**
*加密、解密字符串
*
*@globalstring$db_hash
*@globalarray$pwServer
*@param$string待处理字符串
*@param$action操作,ENCODE|DECODE
*@returnstring
*/
functionStrCode($string,$action='ENCODE'){
$action!='ENCODE'&&$string=base64_decode($string);
$code='';
$key=substr(md5($_SERVER['HTTP_USER_AGENT']),8,18);
$keyLen=strlen($key);
$strLen=strlen($string);
for($i=0;$i<$strLen;$i++){
$k=$i%$keyLen;
$code.=$string[$i]^$key[$k];
}
return($action!='DECODE'?base64_encode($code):$code);
}</pre><p>/*</p><p>* ENCODE为加密,DECODE为解密</p><p>* 加密就是把字符串的每个字符进行^运算,生成新字符串再base64一下返回。</p><p>* 用来进行^运算的字符串通过MD5一些全局变量再substr获得。</p><p>*</p><p>* 这里注意,^运算必须是2个长度相同的字符串才不会产生掉串,</p><p>* 例如:'asd'^'123' == 'PAW',但是'asd'^'123456'还是等于'PAW',多余的字符掉了,</p><p>* 并且不知道传入的字符串到底是多长,因此生成^运算的字符串也不知道要生成多长,</p><p>* 这里用循环的方式进行处理,即^运算的字符串可以是任意长度,然后要加密的字符串用第一个字符与^运算的字符串的第一个字符进行与运算,</p><p>* 以此类推,当^运算的字符长度不够时就循环使用,上边的for循环里边的取%运算就是这个道理。</p><p>*/</p>