zoukankan      html  css  js  c++  java
  • PHP 简单的加密解密方法

      本算法的基础:给定字符A B,A^B=C,C^B=A,即两次异或运算可得到原字符。实现代码如下:

    /**
     * @desc加密
     * @param string $str 待加密字符串
     * @param string $key 密钥
     * @return string
     */
    function encrypt($str, $key){
        $mixStr = md5(date('Y-m-d H:i:s').rand(0,1000));
        $tmp = '';
        $strLen = strlen($str);
        for($i=0, $j=0; $i<$strLen; $i++, $j++){
            $j = $j == 32 ? 0 : $j;
            $tmp .= $mixStr[$j].($str[$i] ^ $mixStr[$j]);
        }
        return base64_encode(bind_key($tmp, $key));
    }
    
    /**
     * @desc解密
     * @param string $str 待解密字符串
     * @param string $key 密钥
     * @return string
     */
    function decrypt($str, $key){
        $str = bind_key(base64_decode($str), $key);
        $strLen = strlen($str);
        $tmp = '';
        for($i=0; $i<$strLen; $i++){
            $tmp .= $str[$i] ^ $str[++$i];
        }
        return $tmp;
    }
    
    /**
     * @desc辅助方法 用密钥对随机化操作后的字符串进行处理
     * @param $str
     * @param $key
     * @return string
     */
    function bind_key($str, $key){
        $encrypt_key = md5($key);
    
        $tmp = '';
        $strLen = strlen($str);
        for($i=0, $j=0; $i<$strLen; $i++, $j++){
            $j = $j == 32 ? 0 : $j;
            $tmp .= $str[$i] ^ $encrypt_key[$j];
        }
        return $tmp;
    }
  • 相关阅读:
    appium之adb常用命令
    测试基础之等价类
    selenium之CSS定位
    括号序列的最小代价
    Spark相对于MapReduce的优势
    Cache系统设计
    [京东2017实习生笔试] 终结者C
    [京东2017实习生笔试] 通过考试
    [hihoCoder] 1078. 线段树的区间修改
    [转载] 一步一步理解线段树
  • 原文地址:https://www.cnblogs.com/cnsr/p/8406002.html
Copyright © 2011-2022 走看看