PHP实现-字符串加密解密

2018-03-21 20:03 By "Powerless" 2852 0 2

    protected $key='wzxaini9';
    
/**
 * 功能:对字符串进行加密处理
 * @param string $str
 * 需要加密的内容.
 */
private function passport_encrypt($str)
{
    srand((double)microtime() * 1000000);
    $encrypt_key=md5(rand(0, 32000));
    $ctr=0;
    $tmp='';
    for($i=0;$i<strlen($str);$i++){
        $ctr=$ctr==strlen($encrypt_key)?0:$ctr;
        $tmp.=$encrypt_key[$ctr].($str[$i] ^ $encrypt_key[$ctr++]);
    }
    return base64_encode($this->passport_key($tmp,$this->key));
}

/**
 * 功能:对字符串进行解密处理
 * @param string $str
 * 需要解密的密文.
 */
private function passport_decrypt($str)
{
    $str=$this->passport_key(base64_decode($str),$this->key);
    $tmp='';
    for($i=0;$i<strlen($str);$i++){
        $md5=$str[$i];
        $tmp.=$str[++$i] ^ $md5;
    }
    return $tmp;
}

/**
 *辅助函数
 */
private function passport_key($str,$encrypt_key)
{
    $encrypt_key=md5($encrypt_key);
    $ctr=0;
    $tmp='';
    for($i=0;$i<strlen($str);$i++){
        $ctr=$ctr==strlen($encrypt_key)?0:$ctr;
        $tmp.=$str[$i] ^ $encrypt_key[$ctr++];
    }
    return $tmp;
}

可以传入特定的加密key外加需要加密的内容可根据时间生成唯一的签名,可用于用户身份验证等场景使用

评 论

View in WeChat

Others Discussion

  • MySQL分组
    Posted on 2019-11-18 14:00
  • PHP7不兼容性
    Posted on 2018-03-07 15:59
  • 一些常见的基础概念
    Posted on 2018-11-28 19:10
  • HTTP头中隐藏PHP版本号
    Posted on 2021-01-11 16:38
  • QPS、TPS、RT、吞吐量到底是什么
    Posted on 2020-02-02 01:15
  • MySQL事务介绍
    Posted on 2019-06-05 18:14
  • 能创建多少个 TCP 连接?
    Posted on 2021-08-02 16:00
  • MySQL中的行级锁,表级锁,页级锁
    Posted on 2018-08-25 11:00