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;
    }
  • 相关阅读:
    [DDCTF 2019]homebrew event loop
    [极客大挑战 2019]FinalSQL
    $[HAOI2008]$硬币购物
    $2018/8/19 = Day5$学习笔记 + 杂题整理
    $2018/8/16 = Day2$学习笔记$+$杂题整理
    [NOIp2009] $Hankson$の趣味题
    2018清北学堂夏日培训游记
    2.数组的声明和创建
    1.什么是数组?
    15.递归
  • 原文地址:https://www.cnblogs.com/cnsr/p/8406002.html
Copyright © 2011-2022 走看看