Bonjour à tous,
J'ai lu quelques articles sur la cryptologie, et le chiffre de Vigenère me semble être un bon début
pour s'initier dans la crypto'. J'ai donc pour projet d'implémenter cette manière de crypté en C. Je ne sais pas si c'est
le meilleur langage pour faire cela, je sais seulement que je suis capable de le faire en C.
Voici comment le programme devrait se comporté :
Chiffre de Vigenère :
Le code n'est surement pas optimisé cependant c'est une bonne base pour commencé.
Le principe du chiffre de Vigenère est le suivant :
Vous avez 26 alphabets différents sachant qu'elles suivent une même logique, chaque alphabet est décalée de une lettre par rapport à
la précédente, c'est tout se qu'il faudra retenir.
Il faudra ensuite choisir un mot clé, secret. Prenons par exemple le mot "salut".
Il faudra ensuite choisir le message à chiffré, prenons "Bonjour".
Voici le fonctionnement du chiffre de Vigenère :
________________________
SALUTSALUT
Bonjour
SALUTSALUTSALUTSALUTSALUT
Bonjour comment vas tu
_________________________
Nous écrivons le mot secret autant de fois que nécessaire au-dessus du texte à crypté jusqu'à se qu'il n'y est plus de lettre du message à
crypté sans une autre au-dessus. Ici nous devrons donc écrire deux fois "salut" pour "couvrir" le message "bonjour".
Ensuite, il faudra aller chercher dans le Carré de Vigenère (nom que l'on donne à la représentation des 26 alphabets) le chiffrement à
appliqué à la lettre, la première lettre à chiffrée est "b", et la lettre du mot secret qui lui correspond est S, nous allons donc dans le
carré de Vigenère à l'alphabet qui commencera par S, vous pouvez trouver un carré de Vigenère facilement sur Google.
Lorsque vous avez repéré cet alphabet, prenez le "b" de l'alphabet en clair( l'alphabet non décalé) et regarder à quoi il correspond.
Notre "b" correspond à un "T". Faisons de même pour la deuxième lettre "o", la lettre du mot secret qui lui correspond est "A", ici vous
l'aurez compris la lettre ne changera pas. Passons maintenant à la troisième lettre "n", la lettre du mot secret lui correspondant est "L",
On va donc chercher l'alphabet qui commencera par "L" dans le carré de Vigenère, lorsqu'on a trouvé cet alphabet, prenez le "n" de
l'alphabet en clair, et regardez à quoi il correspond dans l'alphabet commençant par "L", le "n" correspond à "Y" dans l'alphabet
qui commence par "L".
Au final on obtiendra le message crypté suivant : TOYDHMR pour le message : "bonjour"
Le code que j'ai joint au poste n'est qu'une partie du code final, il permet juste de répondre aux deux questions qui me préoccupées le plus,
Faut-il générer les tables ou directement les inclures dans le programme ?
Comment doit-on traiter le cas où l'utilisateur n'entre pas un mot clé en majuscule ?
Il faudra ajouter à ce code une interface pour l'utilisateur, la génération du message crypté et vos propres améliorations !
J'ai lu quelques articles sur la cryptologie, et le chiffre de Vigenère me semble être un bon début
pour s'initier dans la crypto'. J'ai donc pour projet d'implémenter cette manière de crypté en C. Je ne sais pas si c'est
le meilleur langage pour faire cela, je sais seulement que je suis capable de le faire en C.
Voici comment le programme devrait se comporté :
Chiffre de Vigenère :
Code:
#include <stdio.h> #include <stdlib.h> #include <string.h> char* inUpperCase(const char chaine[]) { char alphabet[26] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',0}; char alphabet0[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',0}; char cache[100] = {0}; int i = 0; int j = 0; int trouve = 0; for(i=0;i<strlen(chaine);i++){ for(j=0;i<strlen(alphabet) && !trouve;j++) { if(chaine[i] == alphabet[j]) { cache[i] = alphabet0[j]; trouve = 1; } else { cache[i] = chaine[i]; } } trouve = 0; } return cache; } int main() { char alphabet0[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z',0}; char alphabet1[26] = {'B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A',0}; char alphabet2[26] = {'C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B',0}; char alphabet3[26] = {'D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C',0}; char alphabet4[26] = {'E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D',0}; char alphabet5[26] = {'F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E',0}; char alphabet6[26] = {'G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F',0}; char alphabet7[26] = {'H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G',0}; char alphabet8[26] = {'I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H',0}; char alphabet9[26] = {'J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I',0}; char alphabet10[26] = {'K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J',0}; char alphabet11[26] = {'L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K',0}; char alphabet12[26] = {'M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L',0}; char alphabet13[26] = {'N','O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M',0}; char alphabet14[26] = {'O','P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N',0}; char alphabet15[26] = {'P','Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O',0}; char alphabet16[26] = {'Q','R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',0}; char alphabet17[26] = {'R','S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q',0}; char alphabet18[26] = {'S','T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R',0}; char alphabet19[26] = {'T','U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S',0}; char alphabet20[26] = {'U','V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T',0}; char alphabet21[26] = {'V','W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U',0}; char alphabet22[26] = {'W','X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V',0}; char alphabet23[26] = {'X','Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W',0}; char alphabet24[26] = {'Y','Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X',0}; char alphabet25[26] = {'Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y',0}; printf("%s",inUpperCase("rouge")); return 0; }
Le principe du chiffre de Vigenère est le suivant :
Vous avez 26 alphabets différents sachant qu'elles suivent une même logique, chaque alphabet est décalée de une lettre par rapport à
la précédente, c'est tout se qu'il faudra retenir.
Il faudra ensuite choisir un mot clé, secret. Prenons par exemple le mot "salut".
Il faudra ensuite choisir le message à chiffré, prenons "Bonjour".
Voici le fonctionnement du chiffre de Vigenère :
________________________
SALUTSALUT
Bonjour
SALUTSALUTSALUTSALUTSALUT
Bonjour comment vas tu
_________________________
Nous écrivons le mot secret autant de fois que nécessaire au-dessus du texte à crypté jusqu'à se qu'il n'y est plus de lettre du message à
crypté sans une autre au-dessus. Ici nous devrons donc écrire deux fois "salut" pour "couvrir" le message "bonjour".
Ensuite, il faudra aller chercher dans le Carré de Vigenère (nom que l'on donne à la représentation des 26 alphabets) le chiffrement à
appliqué à la lettre, la première lettre à chiffrée est "b", et la lettre du mot secret qui lui correspond est S, nous allons donc dans le
carré de Vigenère à l'alphabet qui commencera par S, vous pouvez trouver un carré de Vigenère facilement sur Google.
Lorsque vous avez repéré cet alphabet, prenez le "b" de l'alphabet en clair( l'alphabet non décalé) et regarder à quoi il correspond.
Notre "b" correspond à un "T". Faisons de même pour la deuxième lettre "o", la lettre du mot secret qui lui correspond est "A", ici vous
l'aurez compris la lettre ne changera pas. Passons maintenant à la troisième lettre "n", la lettre du mot secret lui correspondant est "L",
On va donc chercher l'alphabet qui commencera par "L" dans le carré de Vigenère, lorsqu'on a trouvé cet alphabet, prenez le "n" de
l'alphabet en clair, et regardez à quoi il correspond dans l'alphabet commençant par "L", le "n" correspond à "Y" dans l'alphabet
qui commence par "L".
Au final on obtiendra le message crypté suivant : TOYDHMR pour le message : "bonjour"
Le code que j'ai joint au poste n'est qu'une partie du code final, il permet juste de répondre aux deux questions qui me préoccupées le plus,
Faut-il générer les tables ou directement les inclures dans le programme ?
Comment doit-on traiter le cas où l'utilisateur n'entre pas un mot clé en majuscule ?
Il faudra ajouter à ce code une interface pour l'utilisateur, la génération du message crypté et vos propres améliorations !
Commentaire