Présentation de l'algorithme :
Principe :
- Le chiffre de Vigenere utilise une clef que l'on répéte autant de fois que nécessaire afin d'avoir la même longueur que le message à crypter. Exemple avec comme message "LEMESSAGEACRYPTER" et comme clef "MACLEF" :
LEMESSAGEACRYPTER
MACLEFMACLEFMACLE
- La lettre de la clef figurant dans la deuxième ligne indique le décalage à apporter à la lettre du message située au dessus. Exemple :
- Si la lettre de la clef est un A, on ne décale pas la lettre correspondante du message;
- Si la lettre de la clef est un B, on décale d'un rang dans l'alphabet la lettre correspondante du message : ainsi un A dans le message devient un B, un B devient un C, etc...
- Si la lettre de la clef est un C, on décale de 2 rangs dans l'alphabet la lettre correspondante du message : ainsi un A dans le message devient un C, un B devient un D, etc...
- etc...
- Avec notre exemple : la première lettre du message est un L; la lettre correspondante de la clef est un M qui représente un décalage de 12. La première lettre du message crypté est donc un X (12 lettres plus loin que L dans l'alphabet).
- Note : Si après décalage, on dépasse la fin de l'alphabet, on continue à compter en repartant du début de l'alphabet. C'est pour cela qu'on peut aussi utiliser une grille appelée "carré de Vigenere" : voir la page de wikipedia.
Application avec l'algorithme (simplifié) ci-dessous qui ne convient que si le message et la clef ne comportent que des lettres majuscules de A à Z sans espaces.
(note technique : l'instruction message.charCodeAt(pos) permet d'obtenir le code ASCII de la lettre située à la position "pos" dans la chaine "message" et l'instruction String.fromCharCode(un_nombre) renvoie la lettre dont le code ASCII correspond à "un_nombre")
Code de l'algorithme :
VARIABLES
message EST_DU_TYPE CHAINE
longueur_message EST_DU_TYPE NOMBRE
clef EST_DU_TYPE CHAINE
longueur_clef EST_DU_TYPE NOMBRE
i EST_DU_TYPE NOMBRE
code_lettre EST_DU_TYPE NOMBRE
decalage EST_DU_TYPE NOMBRE
lettre EST_DU_TYPE CHAINE
DEBUT_ALGORITHME
LIRE message
LIRE clef
longueur_message PREND_LA_VALEUR message.length
longueur_clef PREND_LA_VALEUR clef.length
POUR i ALLANT_DE 1 A longueur_message
DEBUT_POUR
code_lettre PREND_LA_VALEUR message.charCodeAt(i-1)-65
decalage PREND_LA_VALEUR clef.charCodeAt((i-1)%longueur_clef)-65
lettre PREND_LA_VALEUR String.fromCharCode(65+(code_lettre+decalage)%26)
AFFICHER lettre
FIN_POUR
FIN_ALGORITHME
Fichier AlgoBox associé : vigenere.alg (faire un clic-droit et utiliser l'option "enregistrer sous" pour télécharger le fichier)
Tester l'algorithme :