zoukankan      html  css  js  c++  java
  • 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
    解密:测试加密解密

  • 相关阅读:
    ArchLinux新版本(pacstrap安装)及国内较优源推荐
    [转载]打造自己喜欢的Linux桌面----archlinux
    ArchLinux下LXDE的安装与设置心得
    [转载]linux 文件改名,移动
    SaaS(软件即服务)架构设计
    临时表空间
    DTCMS自定义标签,获取所有栏目以及获得二级子栏目导航
    Druid简介
    jeecg 模糊查询
    JEECG中的模糊查询
  • 原文地址:https://www.cnblogs.com/whoamme/p/4074159.html
Copyright © 2011-2022 走看看