PHP XOR校验和

时间:2015-01-21 13:45:01

标签: php checksum xor

我有以下字符串需要对其进行校验和。我将如何在PHP(或函数)中编写逻辑来实现此目的。这是我从文档中获得的一个示例。

  

1个字节,它是xor校验和,例如:   如果包是:29 29 B1 00 07 0A 9F 95 38 0C 82 0D   0x82 = 29 xor 29 xor B1 xor 00 xor 07 xor 0A xor 9F xor 95 xor 38 xor 0C

在上面的字符串中,29 29 B1 00 07 0A 9F 95 38 0C( 82 )0D是生成的校验和。

2 个答案:

答案 0 :(得分:3)

所有运营商都在这里:http://php.net/manual/en/language.operators.bitwise.php

但是

$a ^ $b

是你要找的东西

答案 1 :(得分:1)

我得到了以下工作,它给出了正确的校验和(130,0x82),所以它很有希望...你可以连接下面的一些语句,以获得稍微好一点的性能,为了便于阅读,我将操作分开。

<?php

// Input string. Checksum to be generated over the first 10 elements. 
$string = '29 29 B1 00 07 0A 9F 95 38 0C 82 0D';

// Initial checksum
$checksum = 0;

// Split into chunks and process first 10 parts
$parts = explode(' ', $string, 11);
for ($i = 0; $i < 10; $i++) {
    $part = $parts[$i];
    $nr = hexdec($part);
    $checksum ^= $nr;
}

// Done, bring back checksum into 0..0xff range
$checksum &= 0xff;
echo "Got checksum: ", $checksum, "\n";

?>