1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
char alphabet[26]={'A','B'}//à Z
TPolyAlphabetique::TPolyAlphabetique(){
textclair=new char[255];textcrypte=new char[255];
chainecle=new char[255];cle=new char[255];
}
TPolyAlphabetique::~TPolyAlphabetique(){
delete textclair;delete textcrypte;delete chainecle;delete cle;
delete[] abaque;
}
void TPolyAlphabetique::fillAbaque(){
int i,j;
for(i=0;i<26;i++)
for(j=0;j<26;j++) abaque[i][j]=alphabet[(j+i)%26];
//en effet, le dcalage de chaque ligne se fait
chaque i
//pas de -1 comme en JulesCesar car k=4 => commence par E ici
}
char TPolyAlphabetique::correspond(char clair,char cle){
int i,j;char brou;
for(j=0;j<26;j++){
if(clair==abaque[0][j]) break;
}
for(i=0;i<26;i++){
if(cle==abaque[i][0]) break;
}
brou=abaque[i][j];
return(brou);
}
char TPolyAlphabetique::correspond2(char cle,char crypt){
int i,j;char brou;
for(i=0;i<26;i++){
if(cle==abaque[0][i]) break;
}
for(j=0;j<26;j++){
if(crypt==abaque[j][i]) break;
}
brou=abaque[j][0];
return(brou);
}
void TPolyAlphabetique::crypter(){
//buildstrkey();
int L=strlen(textclair);char c;char * res=new char[255];
for(int i=0;i<L;i++){
c=correspond(textclair[i],chainecle[i]);
res[i]=c;
}
res[L]=0;strcpy(textcrypte,res);
}
void TPolyAlphabetique::decrypter(){
//buildstrkey();
int L=strlen(textcrypte);char c;char * res=new char[255];
for(int i=0;i<L;i++){
c=correspond2(chainecle[i],textcrypte[i]);
res[i]=c;
}
res[L]=0;strcpy(textclair,res);
}
void TPolyAlphabetique::buildstrkey(){
int lk=strlen(cle);int ltxt;char * tmp=new char[50];
chainecle="";
if (strlen(textclair)>strlen(textcrypte)) ltxt=strlen(textclair);
else ltxt=strlen(textcrypte);
int d=ltxt/lk;int m=ltxt%lk;
for(int i=0;i<d;i++) strcat(chainecle,cle);
if(m>0) strncpy(tmp,cle,m);
strcat(chainecle,tmp);
chainecle[ltxt]=0;//finir chainecle par le kre nul
} |
Partager