【发布时间】:2012-12-31 03:54:31
【问题描述】:
我想对二进制文件进行异或,但结果仍然是错误的异或异或示例脚本:
function _xor($text,$key){
for($i=0; $i<strlen($text); $i++){
for($j=0; $j<strlen($key);$j++){
$text[$i] = $text[$i]^$key[$j];
}
}
return $text;
}
这就是结果:
10011110
应该是异或之间的结果
01100001
01100010
--------
00000011
请给我正确的答案
【问题讨论】:
-
你不能对一个字符串和一个字符串进行异或,并期望它的行为有点像。您应该将伪二进制字符串(即:
'011000001'不是二进制字符串)转换为实际的二进制字符串,然后直接对它们进行异或。 -
@NullUserException: 我刚刚测试了这个,你可以..
-
另外,您的代码可以更简单(和正确)地编写为
return $text ^ $key。 -
@Evert 怎么样? codepad.org/qH5t1Lv7
-
@Evert 我不这么认为。
0x30 ^ 0x31 = 0b110000 ^ 0b110001 = 0b000001。这可以使用'A' ^ 'D' = 0x41 ^ 0x44 = 0b1000001 ^ 0b1000100 = 0b0000101codepad.org/rBJGO0jl 进行验证