Cryptage Vigenère
Takago
Messages postés
1
Date d'inscription
Statut
Membre
Dernière intervention
-
ReganDryke Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
ReganDryke Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
dans le cadre d'un projet de ma première année de BTS, je dois réaliser un mini-projet qui consiste à Crypter et Décrypter un texte avec la méthode Vigenère.
Voici mon code :
// Déclaration des variables globales
char ChaineCaractere [255]="";
char ChaineCryptee [255]="";
char ClefVigenere [255] = "bonjour";
int z;
int x;
strcpy (ChaineCaractere,MFichier->Text.t_str());
int TailleChaine=strlen(ChaineCaractere); // calcul taille buffer non crypté
int TailleChaine1=strlen(ClefVigenere);
for( z=0; z<TailleChaine; z++)
{
for(x=0; x<TailleChaine1; x++)
ChaineCryptee[z]=ChaineCaractere[z]+ClefVigenere[z];
}
ChaineCryptee[z]='\0';
MFichier->Clear();
MFichier->Lines->Add(ChaineCryptee);
Je voudrais ne pas avoir à déclarer plusieurs fois ma clé si la chaine de caractères à crypter et plus longue que la clé. Vu que ma clé ne fait que 7 caractères, cela ne crypte que les 7 premiers caractères de mon texte.
D'avance merci pour votre réponse.
dans le cadre d'un projet de ma première année de BTS, je dois réaliser un mini-projet qui consiste à Crypter et Décrypter un texte avec la méthode Vigenère.
Voici mon code :
// Déclaration des variables globales
char ChaineCaractere [255]="";
char ChaineCryptee [255]="";
char ClefVigenere [255] = "bonjour";
int z;
int x;
strcpy (ChaineCaractere,MFichier->Text.t_str());
int TailleChaine=strlen(ChaineCaractere); // calcul taille buffer non crypté
int TailleChaine1=strlen(ClefVigenere);
for( z=0; z<TailleChaine; z++)
{
for(x=0; x<TailleChaine1; x++)
ChaineCryptee[z]=ChaineCaractere[z]+ClefVigenere[z];
}
ChaineCryptee[z]='\0';
MFichier->Clear();
MFichier->Lines->Add(ChaineCryptee);
Je voudrais ne pas avoir à déclarer plusieurs fois ma clé si la chaine de caractères à crypter et plus longue que la clé. Vu que ma clé ne fait que 7 caractères, cela ne crypte que les 7 premiers caractères de mon texte.
D'avance merci pour votre réponse.
A voir également:
- Cryptage Vigenère
- Programme de cryptage hellobox - Forum Réseaux sociaux
- Cle de cryptage tv panasonic - Forum Réseau
- Comment je configure ma télévision Panasonic a mon wifi - Forum Téléviseurs
- Cryptage en cours caméra ✓ - Forum Caméra
- Impossible de connecter ma télé Panasonic viera ✓ - Forum Téléviseurs
1 réponse
Facile tu n'as qu'à tester si ton message en clair est plus long que ta clef. S'il est effectivement plus long il te faut juste concatener ta clef avec elle même.
Cependant au bout d'un certain nombre de repetition ta clef depassera de beaucoup la taille de ton message. Tu peux regler cela en utilisant seulement un bout de ta string en memorisant sa longeur initiale et en faisant bon usage de la methode substr.
#include<iostream> #include<string> using namespace std; int main() { string clef = "bonjour"; string messageClair = "Salut a tous. Ceci est un test."; while (clef.length()<messageClair.length()) { clef +=clef; cout << messageClair <<endl; cout << clef <<endl<<endl; } cout << messageClair <<endl; cout << clef <<endl; return 1; }
Cependant au bout d'un certain nombre de repetition ta clef depassera de beaucoup la taille de ton message. Tu peux regler cela en utilisant seulement un bout de ta string en memorisant sa longeur initiale et en faisant bon usage de la methode substr.
#include<iostream> #include<string> using namespace std; int main() { string clef = "bonjour"; string messageClair = "Salut a tous. Ceci est un test."; int tailleClefOriginale = clef.length(); //string.length() te permet d'obtenir la longeur d'une string. while (clef.length()<messageClair.length()) //tu testes si la clef est plus petite que le message { clef += clef.substr(0,tailleClefOriginale); //Tu concatene la clef avec la clef originale. strind.substr(int,int) permet de //recuperer un bout de chaine le premier int definnissant la position a partir de //laquelle on recupere et le second le nombre de caractere recuperer (s'il n'est //pas defini il recupere du caractère defini comme depart a la fin de la chaine). cout << messageClair <<endl; cout << clef <<endl<<endl; } cout << messageClair <<endl; cout << clef <<endl; return 1; }