【问题标题】:XOR Binary in PHPPHP中的XOR二进制
【发布时间】: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 = 0b0000101 codepad.org/rBJGO0jl 进行验证

标签: php xor


【解决方案1】:
function _xor($text,$key){
    for($i=0; $i<strlen($text); $i++){
        $text[$i] = intval($text[$i])^intval($key[$i]);
    }
    return $text;
}

echo  _xor('01100001','01100010');

在你使用^之前,你应该先将字符串转换为int

不需要使用两个错误的循环,只需一个即可。

【讨论】:

  • 如果我想在插入这个循环时重复一些二进制数 [code] function _xor($text,$key){ for($i=0; $i
  • @iwandede:对不起,我不明白你的意思。请定义repeat binary number
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 2011-11-20
  • 2018-03-11
  • 1970-01-01
相关资源
最近更新 更多