Bonjour,
Je dois réaliser un xor sur ces données
b'\x7A\x01\x4D\x42\x30\x42\x02\x04\x50\x03\x47\x4B\x2D\x40\x05' (ce qui donne 0x37 dans ce cas)
mais l'opération xor (^) ne fonctionne pas en python sur le type bytes
Merci
Bonjour,
Je dois réaliser un xor sur ces données
b'\x7A\x01\x4D\x42\x30\x42\x02\x04\x50\x03\x47\x4B\x2D\x40\x05' (ce qui donne 0x37 dans ce cas)
mais l'opération xor (^) ne fonctionne pas en python sur le type bytes
Merci
Ce n'est pas le cas en python3.
En python2.7, rien ne t'empêche de convertir chaque caractère vers sa valeur décimale en utilisant la fonction ord():
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 >>> [ord(i) for i in s] [122, 1, 77, 66, 48, 66, 2, 4, 80, 3, 71, 75, 45, 64, 5]
Bon, cela fonctionne si je fais par exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 msg = b'\x7a\x01\x4d\x42\x30\x42\x02\x04\x50\x03\x47\x4B\x2D\x40\x05\x00' #check = 0 def checksum(data): pos = 0 check = 0 while pos < len(data): check = check ^ data[pos] pos = pos + 1 return(check) print(hex(checksum(msg)))
Autre solution pour le fun
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 >>> from functools import reduce >>> from operator import xor >>> >>> msg = b'\x7a\x01\x4d\x42\x30\x42\x02\x04\x50\x03\x47\x4B\x2D\x40\x05\x00' >>> >>> reduce(xor, msg) 55
Partager