PHP加密解密函数

  $str = "测试加密解密";
  $key = '^&yang*%#2014!$';
  $new_str = my_encrypt($str, $key );
  echo '原始:'.$str.'<br />'; 
  echo '加密:'.$new_str.'<br />';
  echo '解密:'.my_decrypt($new_str, $key);

  
  function my_encrypt($string,    $key='')
  {
      $key = md5($key);
      $key_length = strlen($key);
      $string = substr(md5($string.$key),0,8).$string;
      $string_length = strlen($string);
      $rndkey = $box = array();
      $result = '';
      for($i=0; $i<=255; $i++)
      {
          $rndkey[$i] = ord($key[$i%$key_length]);
          $box[$i] = $i;
      }

      for($j=$i=0; $i<256; $i++)
      {
          $j = ($j+$box[$i]+$rndkey[$i])%256;
          $tmp = $box[$i];
          $box[$i] = $box[$j];
          $box[$j] = $tmp;
      }

      for($a=$j=$i=0; $i<$string_length; $i++)
      {
          $a = ($a+1)%256;
          $j = ($j+$box[$a])%256;
          $tmp = $box[$a];
          $box[$a] = $box[$j];
          $box[$j] = $tmp;
          $result .= chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256]));
      }
      
      return str_replace('=','',base64_encode($result));     
 }


 function my_decrypt($string, $key='')
  {
      $key = md5($key);
      $key_length = strlen($key);
      $string = base64_decode($string);
      $string_length = strlen($string);
      $rndkey = $box = array();
      $result = '';
      for($i=0; $i<=255; $i++)
      {
          $rndkey[$i] = ord($key[$i%$key_length]);
          $box[$i] = $i;
      }

      for($j=$i=0; $i<256; $i++)
      {
          $j = ($j+$box[$i]+$rndkey[$i])%256;
          $tmp = $box[$i];
          $box[$i] = $box[$j];
          $box[$j] = $tmp;
      }

      for($a=$j=$i=0; $i<$string_length; $i++)
      {
          $a = ($a+1)%256;
          $j = ($j+$box[$a])%256;
          $tmp = $box[$a];
          $box[$a] = $box[$j];
          $box[$j] = $tmp;
          $result .= chr(ord($string[$i])^($box[($box[$a]+$box[$j])%256]));
      }

      
      if(substr($result,0,8) == substr(md5(substr($result,8).$key),0,8))
      {
          return substr($result,8);
      }
      else
      {
          return'';
      } 
 }

输出结果:

原始:测试加密解密
加密:LoRkIdfstzF0b4MsFHoYQso2MJNIPT7UPB8
解密:测试加密解密

posted @ 2014-11-04 17:06  WhoAmMe  阅读(352)  评论(0编辑  收藏  举报