为了不可破解,XOR 加密必须使用完全随机且从不重复使用的密钥。如果你第二次使用密钥,它就会被破解。这可以通过阅读 http://en.wikipedia.org/wiki/One-time_pad. 页面进行确认。
虽然我不是密码学专家,但我理解破译涉及识别模式,并且如果存在足够多的样本供审查,就可以解密使用相同密钥用 XOR 编码的代码。在加密和解密点都维护每个加密的唯一密钥以确保 100% 不可破解,这本身也存在安全问题——密钥存储在哪里以及如何传输到解密点?
(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)
gmp_xor — 按位异或
一个 GMP 对象。
范例 #1 gmp_xor() 范例
<?php
$xor1 = gmp_init("1101101110011101", 2);
$xor2 = gmp_init("0110011001011001", 2);
$xor3 = gmp_xor($xor1, $xor2);
echo gmp_strval($xor3, 2) . "\n";
?>
上面的例子将会输出
1011110111000100
为了不可破解,XOR 加密必须使用完全随机且从不重复使用的密钥。如果你第二次使用密钥,它就会被破解。这可以通过阅读 http://en.wikipedia.org/wiki/One-time_pad. 页面进行确认。
虽然我不是密码学专家,但我理解破译涉及识别模式,并且如果存在足够多的样本供审查,就可以解密使用相同密钥用 XOR 编码的代码。在加密和解密点都维护每个加密的唯一密钥以确保 100% 不可破解,这本身也存在安全问题——密钥存储在哪里以及如何传输到解密点?
XOR 加密是终极加密算法。它无法被破解。它被用于加密隐形潜艇的命令。我不同意下面“小妹妹”的帖子。如果你使用一个与加密消息一样长的密钥(比如从 CD 上记录的空间噪声),那么加密消息也是随机的——在没有密钥的情况下无法解密。在这些条件下,XOR 是有史以来已知的最強加密算法。
逻辑 XOR 可用于加密数据。使用资源 A 作为你的原始文本,使用资源 B 作为密钥。确保使用足够长的密钥,这样密钥不会循环。解密的方式相同,将加密文本作为资源 A,密钥作为资源 B 输入。
以下是一个计算任意(但相同)长度的两个位字符串的 XOR 值的快速替代方法。
<?php
/**
* 位字符串的 XOR 操作
* 位字符串必须具有相同的长度
*
* @param string $o1
* @param string $o2
* @return string
*/
function bitxor($o1, $o2) {
$xorWidth = PHP_INT_SIZE*8;
$o1 = str_split($o1, $xorWidth);
$o2 = str_split($o2, $xorWidth);
$res = '';
$runs = count($o1);
for($i=0;$i<$runs;$i++)
$res .= decbin(bindec($o1[$i]) ^ bindec($o2[$i]));
return $res;
}
?>