Bonjour,
j'ai essayé un truc comme ca pour faire un xor entre deux chaines (le texte a et la clef b):
puis j'essai de transformer cette chaine de 0 et 1 en chaine de caractères. Pour se faire, je teste avec ce bout de code (toujours dans la def):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 a = "12345678abcdefghABCDEFGHàéèù$*+!" b = "zzzzzzzz" def xorStrings(a,b): # encode la chaine e = a.encode('utf-8') # creer une liste avec les bytes avec l'entete 0b slicee l = [bin(i)[2:] for i in e] # ajouter des 0 devant les bytes (jusqu'a qu'il fasse 8) for i in range(len(l)): while len(l[i])<8: l[i] = "0"+l[i] # créer un chaine de 0 et 1 avec les bytes s = "".join(l) print("string: ",s) # même chose que ci avant avec la str representant la clef e = b.encode('utf-8') l = [bin(i)[2:] for i in e] for i in range(len(l)): while len(l[i])<8: l[i] = "0"+l[i] k = "".join(l) print("key: ",k) # effectuer le xor entre chaque bit de la chaine et de la clef xored = [] for i in range(max(len(s), len(k))): print(i%len(s), i%len(k)) xoredVal = int(s[i%len(s)]) ^ int(k[i%len(k)]) xored.append(str(xoredVal)) x = ''.join(xored) print("xored: ", type(x),x)
les caractères obtenus sont souvent des "cases vides" et trucs bizarres.. mais il semblerait que ca bloque car la boucle retourne une erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 def xorStrings(a,b): ... .. # faire une liste des bytes du xor (resultant du xor entre chaine et clef) xorStr = [] for i in range(0, len(xored), 8): print("i=",i) buf = "" for j in range(i,i+8): print("j=",j) buf += xored[j] xorStr.append(buf) print(xorStr) # faire une chaine de carateres avec ces bytes "xorés" for i in xorStr: byte = chr(int(i)) print(byte)
Existe t'il un moyen de "xorer" deux chaines et d'avoir un retour qui puisse être traduit en caractères et écrit? (puis xoré à nouveau avec la clef pour retrouver le texte .. vu que c'est l'idée de l'exercice que je me suis fixé ).
⬃
⫸
⫹
⭦
⭧
⭜
⭝
✚
𛆣
𛆘
𛆙
𛈆
𛈇
𛇼
𛇽
Traceback (most recent call last):
File "C:\Adm\Info\Python\MyPyProgs\Enigma-concept.py", line 349, in <module>
print (xorStrings(a,b))
File "C:\Adm\Info\Python\MyPyProgs\Enigma-concept.py", line 345, in xorStrings
byte = chr(int(i))
ValueError: chr() arg not in range(0x110000)
Merci pour votre aide .
Jma
Partager