算法概述
加密因子:0xA3
加密算法:将待加密的字符串中的每一个字节,分别与加密因子进行异或,然后将异或后的二进制结果进行高低位交换,然后将交换后的结果转换成2进制字符串。所有的字节转换完成后,将最终的结果base64
加密。
解密算法:其实就是加密算法的反向操作。先将加密字符串base64解密,然后字符串的每一个字节(就是上面转的二进制字符串)转换成二进制,再将二进制高低位交换、异或,最后将二进制转换成字符。
/**
* 加密算法
*/
function encrypt($str, $secret)
{
// 存放结果字符串
$result = '';
// 加密
for($i = 0; $i < strlen($str); $i++) {
// 异或
$xor = ord($str[$i]) ^ hexdec($secret);
// 转二进制
$binary = decbin($xor);
// 高低位交换
$reverse = implode('', array_reverse(str_split($binary, 4)));
// 转换成16进制,如果出现1位的情况,左侧补0
$encodeData = str_pad(base_convert($reverse, 2, 16), 2, '0', STR_PAD_LEFT);
// 16进制转二进制字符串
$result .= pack('H*', $encodeData);
}
return base64_encode($result);
}