PHP实现-字符串加密解密

2018-03-21 20:03 By "Powerless" 2865 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外加需要加密的内容可根据时间生成唯一的签名,可用于用户身份验证等场景使用

评 论

Others Discussion

  • 初识七层、五层、四层网络协议
    Posted on 2021-04-09 16:52
  • 投票通过,PHP 8 确认引入 Union Types 2.0
    Posted on 2019-11-18 22:22
  • Linux工具 - NM目标文件格式分析
    Posted on 2019-04-24 10:29
  • PHP扩展安装
    Posted on 2019-06-24 11:28
  • Redis各种数据类型的使用场景举例分析【三】
    Posted on 2018-11-22 17:00
  • ACID原则
    Posted on 2020-12-17 16:36
  • PHP7不兼容性
    Posted on 2018-03-07 15:59
  • MySQL分组
    Posted on 2019-11-18 14:00