@ L'algo(rithme) XOR !!!
# Article Par The Novice (Pirates Mag' n°1) # Edito Sommaire Participer !!! La Rédac


@ Xor, qu'est-ce que cela ?

    Vous souhaitez créer un programme de cryptage / décryptage, vous pensez que c'est compliqué, bien au contraire, c'est très simple !!! Il vous suffit d'utiliser une des méthodes de codage, très répandu pas ailleurs, l'algorithme XOR. Et ce qui tombe plutôt bien, c'est que cette petite instruction est incluse dans la plupart des languages de programmation (Basic, C, etc...). Cette fonction est une fonction à deux paramètres qui est un "ou exclusif" en français. Le tableau de valeur de cette fonction est le suivant: f(0,0)=0; f(1,0)=1; f(0,1)=1; f(1,1)=0. En d'autres termes cette fonction ne renvoie 1 que si un, et un seul, de ces arguments est égal à 1. En figeant un de ses deux paramètres, elle forme une bijection (voir ci-dessous) et permet de coder ou décoder. C'est ce qui est fort pratique avec Xor: c'est que vous pouvez créer un programme qui sert en même temps à coder et à décoder ! Ainsi le programme (ci-dessous) rédigé en basic travaille sur une chaîne de caractères qui pourra être le message originel ou le message crypté.

@ C'est quoi donc une bijection ?

    La transformation des informations en données cryptées est une fonction mathématique. Pour que le codage soit efficace, et réversible, elle doit vérifier certaines régles. Pour chaque valeur X doit correspondre après cryptage une, et une seule, image Y. Et inversement pour chaque valeur Y il ne doit exister qu'un, et un seul, caractère X tel que f(X) = Y (c'est ainsi qu'on note la fonction f qui permet d'obtenir Y à partir de X). Voilà donc (C'est) la définition d'une bijection.

@ Un petit listing en Basic...

10 INPUT "Entrez la clef "; CLEF$ 'saisie de la clef
20 INPUT "Entrez le texte ";TEXTE$ 'saisie du texte
30 FOR I = 0 TO LEN(TEXTE$) / LEN(CLEF$)
'on répète la clef de façon qu'elle soit aussi longue que le texte.
40 CLEFLONG$ = CLEFLONG$ + CLEF$
50 NEXT I
60 FOR I = 1 TO LEN(TEXTE$)
70 TOTO = ASC(MID$(TEXTE$, I, 1) XOR ASC(MID$(CLEFLONG$, I, 1))
'on effectue le XOR entre chaque caractère du texte et de la clef
80 RESULTAT$ = RESULTAT$ + CHR$(TOTO)
90 NEXT I
100 PRINT RESULTAT$ 'on affiche le résultat

@ Un exemple !!!

    Maintenant, voyons un exemple "concret" de ce que fait l'algorithme XOR. Exemple: Le texte que l'on veut crypter est "PIRATEZINE", la clef est "TOTO". La clef longue sera donc "TOTOTOTOTO". Pour le codage, l'opération XOR va procéder entre les codes ASCII des caractères du texte à crypter "PIRATEZINE" et de la clef "TOTO". Donc le code ASCII de P est 80 soit en binaire 1010000. Ensuite celui de T est 84 soit en binaire 1010100. Xor effectue l'opération OU exclusif bit à bit entre ces deux valeurs. Le résultat est la valeur 0000100 en binaire soit 4 en décimal se qui correspond au caractère pique. C'est donc la valeur cryptée du premier caractère de notre texte, c'est-à-dire P. Le cryptage du second caractère s'effectuera avec la lettre O, il sera donc différent. Donc, la même lettre n'aura jamais des codages identique puisque les codages seront différent suivant l'emplacement où le caractère se trouvera. Bon, on a vu le codage, mais vous me direz comment faire pour faire décrypter se que l'on vient de crypter. Et bien, c'est très simple, d'abord on utilise toujours le même programme sauf que l'on va opérer dans le sens inverse au cryptage. Donc, le code binaire 0000100, ou pique en ASCII, obtenu lors de notre cryptage va être appliqué avec l'algo Xor au code binaire du T soit 1010100, ce qui donne le résultat suivant: 1010000 en binaire soit en code ASCII: P (le premier caractère de notre texte). Voilà, vous venez de réaliser un cryptage puis un décryptage du même texte. Vous avez maintenant les bases pour programmer un programme de cryptage / décryptage à base de l'algorithme XOR.


Cet article est la propriété de The Novice. La rédaction de cet ezine ainsi que l'auteur déclinent toutes responsabilités vis-à-vis des conséquences que pourrait entraîner cet article.