PHPで2つの文字列(16進エンコード)をXORしたいと思います。演算子^を使用してみましたが、0しか得られません。どうすればよいですか?なぜそれが間違っているのですか?
質問する
8276 次
4 に答える
10
<?php
$s1 = 'ABCDEF1234567890';
$s2 = '0987654321ABCDEF';
$x = bin2hex(pack('H*',$s1) ^ pack('H*',$s2));
?>
于 2013-01-15T13:30:47.080 に答える
2
$x = dechex(hexdec($s1) ^ hexdec($s2));
あなたが最初に抱えていた問題は、16進文字列が実際には文字列であることです。文字列に二項演算子を使用すると、文字コードがバイト値として使用されます。
于 2013-01-15T13:22:08.937 に答える
1
ここでの@KingCrunchの回答とコメントに基づいて、オクテットを比較して回答を構築するためにこの単純なループを書きました。興味深いことに、これは @lawlor の回答と同じ結果になります。
$key1 = 'ABCDEF1234567890ABCDEF1234567890';
$key2 = '0987654321ABCDEF0987654321ABCDEF';
$key1_octets = str_split($key1, 2);
$key2_octets = str_split($key2, 2);
$xor = '';
foreach ($key1_octets as $id => $key1_octet) {
$xor .= dechex(hexdec($key1_octets[$id]) ^ hexdec($key2_octets[$id]));
}
print $xor;
print bin2hex(pack('H*',$key1) ^ pack('H*',$key2));
どちらが有効な結果であるかは実際にはわかりませんが、フィードバックのためにこれを提出し、オクテットの処理方法を知らずに@KingCrunchの回答を見ている他の誰かに役立つ場合に備えて.
于 2013-03-19T18:34:41.133 に答える