<?php var_dump(0 ^ 0); // int(0) 0和0相同,结果为0 var_dump(0 ^ 1); // int(1) 0和1不同,结果为1 var_dump(1 ^ 0); // int(1) 1和0不同,结果为1 var_dump(1 ^ 1); // int(0) 1和1相同,结果为0 var_dump(5 ^ 3); // int(6)
<?php var_dump('msg' ^ 'key' ^ 'key'); // string(3) "msg"
<?php /** * 基于异或运算自反性的加解密函数 * * @param string $data 要加密或解密的数据 * @param string $action 操作,可选值:encrypt=加密|decrypt=解密 * @return string 加密或解密结果 */ function xor_crypt($data, $action = 'encrypt') { $key = 'www.manong.life'; // 加解密所必须的密钥 /** * 加解密核心函数(异或运算) * 备注:这个匿名函数是代码的核心部分。 * * @param string $data 要加密或解密的数据 * @param string $key 密钥 * @return string 加密或解密结果 */ $xor = static function ($data, $key) { $datalen = strlen($data); // 数据长度,单位:字节(byte) $keylen = strlen($key); // 密钥长度,单位:字节(byte) $result = ''; // 保存加解密数据每个字节的异或运算结果 // 逐个字节遍历要加密或解密的数据,每个字节都进行一次异或运算 for ($i = 0; $i < $datalen; $i++) { $byte = $key[$i % $keylen]; // 从密钥取一个字节作为异或运算的操作数 $result .= $data[$i] ^ $byte; } return $result; }; //========== 加密操作·开始 ==========// if ($action === 'encrypt') { $encrypt = $xor($data, $key); $encrypt = base64_encode($encrypt); // 密文是一堆乱码,需要用base64_encode()进行编码处理方便传输和保存 return $encrypt; } //========== 加密操作·结束 ==========// //========== 解密操作·开始 ==========// $decrypt = base64_decode($data); // 加密操作最后用base64_encode()编码了密文,这里需要先解码 $decrypt = $xor($decrypt, $key); return $decrypt; //========== 解密操作·结束 ==========// } $encrypt = xor_crypt('PHP是世界上最好的语言', 'encrypt'); $decrypt = xor_crypt($encrypt, 'decrypt'); echo "加密结果:{$encrypt}<br>" . PHP_EOL; // 加密结果:Jz8nyPXOitf4gLvgjd7vkev3y8jcifXqj4HBgc7l echo "解密结果:{$decrypt}<br>" . PHP_EOL; // 解密结果:PHP是世界上最好的语言
Copyright © 2024 码农人生. All Rights Reserved