若 a=b ^ c; 则 b=a ^ c (^ 是异或的意思),php 在处理异或的字符时先把字符转化为二进制的 ascii 值, 对这些值进行异或, 获取结果后在将 ascii 值转化为字符, 原理说晚了直接贴实现的代码:
代码如下:
- echo '';
- $str='世界, 你好';
- function jiami($str,$key){
- $key=md5($key);
- $k=md5(rand(0,100));// 相当于动态密钥
- $k=substr($k,0,3);
- $tmp="";
- for($i=0;$i $tmp.=substr($str,$i,1) ^ substr($key,$i,1);
- }
- return base64_encode($k.$tmp);
- }
- function jiemi($str,$key){
- $len=strlen($str);
- $key=md5($key);
- $str=base64_decode($str);
- $str=substr($str,3,$len-3);
- $tmp="";
- for($i=0;$i $tmp.=substr($str,$i,1) ^ substr($key,$i,1);
- }
- return $tmp;
- }
- $key='cc';
- $jh=jiami($str, $key);
- echo '加密前:'.$str.'';
- echo '加密后:'.$jh.'';
- echo '解密后:'.jiemi($jh, $key).'';
有机会在完善下, 本函数实现的是简单的加密解密
来源: https://www.php1.cn/detail/php-aeb697ee65.html