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

  • 相关阅读:
    如何解决IIS配置HTTPS证书后刷新消失问题
    Nginx https服务器证书安装步骤
    Websocket如何建立连接
    Websocket原理
    浅谈Vue中的$set的使用
    vue-router路由如何实现传参
    vue-router路由详细
    vue 中注册全局组件
    java基础
    练习例题(进度条效果和选项卡效果)
  • 原文地址:https://www.cnblogs.com/whoamme/p/4074159.html
Copyright © 2011-2022 走看看