异或(XOR)算法(最轻量,无任何依赖)


原理:用同一个密钥对每个字符做按位异或,效率极高。注意:这是简易混淆,不是军事级加密(破解难度低)。


PHP 端(加密/解密)


<?php
// 加密
function simpleEncrypt($data, $key) {
$result = '';
for ($i = 0; $i < strlen($data); $i++) {
$result .= chr(ord($data[$i]) ^ ord($key[$i % strlen($key)]));
}
return base64_encode($result);
}

// 解密
function simpleDecrypt($data, $key) {
$data = base64_decode($data);
$result = '';
for ($i = 0; $i < strlen($data); $i++) {
$result .= chr(ord($data[$i]) ^ ord($key[$i % strlen($key)]));
}
return $result;
}

// 使用示例
$key = 'abc123';
$enc = simpleEncrypt('你好,世界!', $key); // 类似:5rKf5ouN...
$dec = simpleDecrypt($enc, $key); // 输出:你好,世界!
?>

JavaScript 端(加密/解密)


// 使用 TextEncoder/Decoder 完美支持中文和特殊符号
function simpleEncrypt(str, key) {
const encoder = new TextEncoder();
const data = encoder.encode(str);
const keyBytes = encoder.encode(key);
const result = new Uint8Array(data.length);

for (let i = 0; i < data.length; i++) {
result[i] = data[i] ^ keyBytes[i % keyBytes.length];
}
// 将二进制转成 Base64
return btoa(String.fromCharCode(...result));
}

function simpleDecrypt(encoded, key) {
const binary = atob(encoded);
const data = new Uint8Array(binary.length);
for (let i = 0; i < binary.length; i++) {
data[i] = binary.charCodeAt(i);
}
const keyBytes = new TextEncoder().encode(key);
const result = new Uint8Array(data.length);
for (let i = 0; i < data.length; i++) {
result[i] = data[i] ^ keyBytes[i % keyBytes.length];
}
return new TextDecoder().decode(result);
}

// 使用示例
const key = 'abc123';
const enc = simpleEncrypt('你好,世界!', key);
const dec = simpleDecrypt(enc, key);
console.log(dec); // 你好,世界!


注意:PHP 和 JS 的密钥必须完全一致,上述代码两边的 simpleDecrypt 可以直接互相解密对方生成的密文。