Je veux faire un XOR entre deux chaînes de caractères (codées en hexadécimal) en php. J'ai essayé d'utiliser l'opérateur ^, mais je n'obtiens que 0. Comment puis-je faire cela ? Pourquoi est-ce que c'est faux ?
Réponses
Trop de publicités?Vous devez les décoder avec hex2bin() avant d'appliquer le XOR ^
opérateur .
Mise à jour : J'oublie toujours que cette fonction nécessite PHP/5.4 ou plus, ce qui peut poser problème. Dans ce cas, vous devez utiliser la fonction peu intuitive pack() fonction :
$binary = pack('H*', $hexadecimal);
En me basant sur la réponse de @KingCrunch ici et sur les commentaires, j'ai écrit cette simple boucle pour comparer les octets et construire la réponse. Il est intéressant de noter que cela donne le même résultat que la réponse de @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));
Je ne suis pas sûr que l'un ou l'autre soit un résultat valide, mais je le propose pour avoir un retour d'information et au cas où cela aiderait quelqu'un d'autre qui regarde la réponse de @KingCrunch sans savoir comment traiter les octets.