Origine : |
Le cryptage XOR est un système de cryptage basique mais pas trop limité. Ainsi, il a beaucoup été utilisé dans les débuts de l'informatique et continue à l'être encore aujourd'hui car il est facile à implémenter, dans toutes sortes de programmes.
Mécanisme : |
Le XOR est un opérateur logique qui correspond à un "OU exclusif" : c'est le (A OU B) qu'on utilise en logique mais qui exclue le cas où A et B sont simultanément vrais. Voici sa table de vérité :
Table de vérité du XOR | ||
A | B | (A XOR B) |
FAUX | FAUX | FAUX |
FAUX | VRAI | VRAI |
VRAI | FAUX | VRAI |
VRAI | VRAI | FAUX |
En informatique, chaque caractère du message à coder est représenté par un entier, le code ASCII. Ce nombre est lui-même représenté en mémoire comme un nombre binaire à 8 chiffres (les bits). On choisit une clé que l'on place en dessous du message à coder, en la répétant autant de fois que nécessaire, comme dans le cryptage de Vigenère. Le message et la clé étant converti en binaire, on effectue un XOR, bit par bit, le 1 représentant VRAI et le 0 FAUX. Le résultat en binaire peut être reconverti en caractères ASCII et donne alors le message codé.
L'algorithme est complètement symétrique : la même opération est réappliqué au message final pour retrouver le message initial.
Remarque : Parfois, on applique une permutation circulaire aux bits du message final pour donner le message codé.
Inconvénients : |
Les mêmes que pour le cryptage de Vigenère.
Exemple 1 : |
Voici le mot MESSAGE converti en binaire :
Lettres |
M |
E |
S |
S |
A |
G |
E |
Codes ASCII |
77 |
69 |
83 |
83 |
65 |
71 |
69 |
Binaire |
01001101 |
01000101 |
01010011 |
01010011 |
01000001 |
01000111 |
01000101 |
Le mot CLE en binaire est lui représenté par 01000011 - 01001100 - 01000101 .
Message en binaire |
01001101 |
01000101 |
01010011 |
01010011 |
01000001 |
01000111 |
01000101 |
Clé en binaire (répétée si nécessaire) |
01000011 |
01001100 |
01000101 |
01000011 |
01001100 |
01000101 |
01000011 |
Message crypté en binaire |
00001110 |
00001001 |
00010110 |
00010000 |
00001101 |
00000010 |
00000110 |
Exemple 2 : |