• 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
    解密:测试加密解密

  • 相关阅读:
    索引,约束
    C# Dictionary 的几种遍历方法
    唯一性约束和唯一性索引的区别
    JS中offsetTop、clientTop、scrollTop、offsetTop各属性介绍
    Dictionary学习笔记嵌套Dictionary的遍历与排序(按Key值)(二)
    Dictionary学习笔记Dictionary定义与输出(一)
    集体智慧编程笔记搜索和排序
    emacs键盘映射
    集体智慧编程笔记推荐系统
    使用SRILM训练大的语言模型
  • 原文地址:https://www.cnblogs.com/whoamme/p/4074159.html
Copyright © 2020-2023  润新知