PHP实现-字符串加密解密

2018-03-21 20:03 By "Powerless" 2868 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

  • 分布式架构之「 数据分布」
    Posted on 2019-11-14 10:00
  • PHP扩展ImageMagick安装
    Posted on 2022-11-11 11:16
  • PHP7不兼容性
    Posted on 2018-03-07 15:59
  • Redis各种数据类型的使用场景举例分析【三】
    Posted on 2018-11-22 17:00
  • 投票通过,PHP 8 确认引入 Union Types 2.0
    Posted on 2019-11-18 22:22
  • PHP设计模式 - 委托模式
    Posted on 2019-04-25 16:15
  • BASE原则
    Posted on 2020-12-17 16:42
  • 程序员年中考试题-段子版
    Posted on 2021-06-23 15:57