leezhxing
/**
 * 加密、解密字符串
 *
 * @global string $db_hash
 * @global array $pwServer
 * @param $string 待处理字符串
 * @param $action 操作,ENCODE|DECODE 
 * @return string
 */
function StrCode($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);
}
/*
 * ENCODE为加密,DECODE为解密
 * 加密就是把字符串的每个字符进行^运算,生成新字符串再base64一下返回。
 * 用来进行^运算的字符串通过MD5一些全局变量再substr获得。
 * 
 * 这里注意,^运算必须是2个长度相同的字符串才不会产生掉串,
 * 例如:\'asd\'^\'123\' == \'PAW\',但是\'asd\'^\'123456\'还是等于\'PAW\',多余的字符掉了,
 * 并且不知道传入的字符串到底是多长,因此生成^运算的字符串也不知道要生成多长,
 * 这里用循环的方式进行处理,即^运算的字符串可以是任意长度,然后要加密的字符串用第一个字符与^运算的字符串的第一个字符进行与运算,
 * 以此类推,当^运算的字符长度不够时就循环使用,上边的for循环里边的取%运算就是这个道理。 
 */

 

分类:

技术点:

相关文章:

  • 2022-01-07
  • 2021-11-06
  • 2021-11-06
  • 2021-11-06
  • 2021-09-28
  • 2021-11-06
  • 2021-11-06
  • 2022-01-07
猜你喜欢
  • 2021-11-06
  • 2021-11-06
  • 2021-11-06
  • 2021-11-06
  • 2021-11-06
  • 2021-11-06
  • 2021-11-06
相关资源
相似解决方案