+
12
-

回答

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 库)。

网友回复

我知道答案,我要回答