Cryptographie TD 1 - Exercice 4

On recopie les deux listes ...

In [1]:
u=['99', 'f0', '11', '31', '3f', 'f6', '9d', '52']
v=['89', 'fa', '1f', '34', '38', 'eb', '8c', '59']

On convertit les chaînes hexadécimales en entiers

In [ ]:
u = [int(x,16) for x in u]
v = [int(x,16) for x in v]

Et on calcule le XOR des deux cryptogrammes, qui est aussi celui des deux textes clairs :

In [3]:
xx = [u[i]^v[i] for i in range(len(u))]

On récupère la liste de mots anglais de 8 lettres en minuscules :

In [5]:
with open('/usr/share/dict/words','r') as dico:
    dd = [w.rstrip().lower() for w in dico]
dd8=[list(map(ord,w)) for w in dd if len(w)==8]

Et on va calculer le XOR de chacun d'eux avec xx. Si le résultat est dans le dictionnaire, on a probablement trouvé un des mots.

In [6]:
def f(w):
    return [w[i]^xx[i] for i in range(8)]
In [7]:
res = [w for w in dd8 if f(w) in dd8]
In [8]:
print (len(res))
print (''.join(map(chr,res[0])))
print (''.join(map(chr,res[1])))
2
computer
security
In [ ]: