PHP 和 Python 都可以通过 逐字节异或(XOR) 的方式实现简单的 XOR 加密与解密。XOR 是一种对称操作:(A XOR B) XOR B = A,因此同一个密钥既可以加密也可以解密。
下面分别展示 PHP 和 Python 的实现方式,保持互相兼容(即用 PHP 加密的数据,Python 能解密,反之亦然)。
通用规则:
密钥可为任意字符串(如 "mykey")。
数据和密钥都按字节处理。
密钥会循环重复使用,以匹配数据长度。
PHP 实现(加密 & 解密)
<?php
function xorCrypt($data, $key) {
$result = '';
$keyLen = strlen($key);
for ($i = 0; $i < strlen($data); $i++) {
$result .= $data[$i] ^ $key[$i % $keyLen];
}
return $result;
}
// 示例
$plaintext = "Hello, world!";
$key = "mykey";
// 加密(输出为二进制,通常需 base64 编码用于传输)
$encrypted = xorCrypt($plaintext, $key);
$encrypted_b64 = base64_encode($encrypted);
// 解密
$decrypted = xorCrypt(base64_decode($encrypted_b64), $key);
echo "原文: $plaintext\n";
echo "密文 (base64): $encrypted_b64\n";
echo "解密: $decrypted\n";
?> Python 实现(兼容 PHP)
import base64
def xor_crypt(data: bytes, key: str) -> bytes:
key_bytes = key.encode('utf-8')
result = bytearray()
for i in range(len(data)):
result.append(data[i] ^ key_bytes[i % len(key_bytes)])
return bytes(result)
# 示例
plaintext = "Hello, world!"
key = "mykey"
# 加密
encrypted = xor_crypt(plaintext.encode('utf-8'), key)
encrypted_b64 = base64.b64encode(encrypted).decode('ascii')
# 解密
decrypted = xor_crypt(base64.b64decode(encrypted_b64), key).decode('utf-8')
print("原文:", plaintext)
print("密文 (base64):", encrypted_b64)
print("解密:", decrypted) 互操作说明:
两边都使用 UTF-8 编码处理字符串。
加密结果是二进制字节,建议用 base64 编码后存储或传输。
密钥必须完全一致(区分大小写、空格等)。
安全提醒:
XOR 加密 不是安全的现代加密方式!它容易受到已知明文攻击、频率分析等破解手段。仅适用于:
简单 obfuscation(混淆)
教学演示
非敏感数据的轻量级保护
如需真正安全的加密,请使用 AES(如 PHP 的 openssl_encrypt + Python 的 cryptography 库)。
网友回复


