AlgoBox : Cryptage par le chiffre de Vigenere (version simplifiée)

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")

Fichier AlgoBox associé : vigenere.alg (faire un clic-droit et utiliser l'option "enregistrer sous" pour télécharger le fichier)


Tester l'algorithme
Cliquer sur ce bouton pour exécuter l'algorithme : 

Résultats

Code de l'algorithme
1   VARIABLES
2     message EST_DU_TYPE CHAINE
3     longueur_message EST_DU_TYPE NOMBRE
4     clef EST_DU_TYPE CHAINE
5     longueur_clef EST_DU_TYPE NOMBRE
6     i EST_DU_TYPE NOMBRE
7     code_lettre EST_DU_TYPE NOMBRE
8     decalage EST_DU_TYPE NOMBRE
9     lettre EST_DU_TYPE CHAINE
10  DEBUT_ALGORITHME
11    LIRE message
12    LIRE clef
13    longueur_message PREND_LA_VALEUR message.length
14    longueur_clef PREND_LA_VALEUR clef.length
15    POUR i ALLANT_DE 1 A longueur_message
16      DEBUT_POUR
17      code_lettre PREND_LA_VALEUR message.charCodeAt(i-1)-65
18      decalage PREND_LA_VALEUR clef.charCodeAt((i-1)%longueur_clef)-65
19      lettre PREND_LA_VALEUR String.fromCharCode(65+(code_lettre+decalage)%26)
20      AFFICHER lettre
21      FIN_POUR
22  FIN_ALGORITHME