Cryptage avec des

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 144 fois - Téléchargée 22 fois

Contenu du snippet

ce code à été réaliser dans 3 jous uniquement pour le but de mini projet de cryptage
ce code à été présenter à issats
le compilateur est BorlantC++

Source / Exemple :


#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <stdlib.h>

char t[17]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};// Tableau utiliser en convertion Binaire ---> Hexadecimale

//-------------------------------------fonction de convertion de base binaire à la base hexadicimale de taille 64bits
void convBinHex64 (int *b , char *h)
{
int *q, *a,i,j,*c1;
char *c;
c=(char*)malloc(16*sizeof(char));
q=(int*)malloc(64*sizeof(int));
a=(int*)malloc(4*sizeof(int));
c1=(int*)malloc(1*sizeof(int));
q=b;
c=h;
for(i=0;i<16;i++)
{
 for (j=0;j<4;j++)

  • (a+j)=*(q+j+i*4);
  • c1= *(a+3)+*(a+2)*2+*(a+1)*4+*(a+0)*8;
  • (c+i) = t[*c1];
} } //-------------------------------------fonction de convertion de base binaire à la base hexadicimale de taille 48 bits void convBinHex48 (int *b , char *h) { int *q, *a,i,j,*c1; char *c; c=(char*)malloc(12*sizeof(char)); q=(int*)malloc(48*sizeof(int)); a=(int*)malloc(4*sizeof(int)); c1=(int*)malloc(1*sizeof(int)); q=b; c=h; for(i=0;i<12;i++) { for (j=0;j<4;j++)
  • (a+j)=*(q+j+i*4);
  • c1= *(a+3)+*(a+2)*2+*(a+1)*4+*(a+0)*8;
  • (c+i) = t[*c1];
} } //-------------------------------------fonction de convertion de base binaire à la base hexadicimale de taille 32bits void convBinHex32 (int *b , char *h) { int *q, *a,i,j,*c1; char *c; c=(char*)malloc(8*sizeof(char)); q=(int*)malloc(32*sizeof(int)); a=(int*)malloc(4*sizeof(int)); c1=(int*)malloc(1*sizeof(int)); q=b; c=h; for(i=0;i<8;i++) { for (j=0;j<4;j++)
  • (a+j)=*(q+j+i*4);
  • c1= *(a+3)+*(a+2)*2+*(a+1)*4+*(a+0)*8;
  • (c+i) = t[*c1];
} } //-------------------------------------fonction de convertion de base binaire à la base hexadicimale de taille 28 bits void convBinHex28 (int *b , char *h) { int *q, *a,i,j,*c1; char *c; c=(char*)malloc(7*sizeof(char)); q=(int*)malloc(28*sizeof(int)); a=(int*)malloc(4*sizeof(int)); c1=(int*)malloc(1*sizeof(int)); q=b; c=h; for(i=0;i<7;i++) { for (j=0;j<4;j++)
  • (a+j)=*(q+j+i*4);
  • c1= *(a+3)+*(a+2)*2+*(a+1)*4+*(a+0)*8;
  • (c+i) = t[*c1];
} } //------------affiche tableau b avec l nombre de ligne et c nombre de colonne void affiche_tab(int *b,int l,int c) {int *p,*q; for (p=b;p<b+l*c;p+=c) {for (q=p;q<p+c;q++) printf("%d",*q); } } //------------convertion de dicimale vers binaire void convert (int d,int *b) { int i,j=63, *p,*q; int div,div2; for(p=b;p<b+64;p+=8) for(q=p;q<p+8;q++)
  • q=0;
div=d; do { div2 = div / 2;
  • (b+j) =(div - div2*2);
j--; div = div2; } while (j > 0 && div2 != 0); } //------------Premutation de 64bits en 56bits void pc1(int *a,int *b)//a de dimension 64 bits et b de dimension 56 bits { int *p1, *q1; p1=(int*)malloc(64*sizeof(int)); q1=(int*)malloc(56*sizeof(int)); p1=a;q1=b;
  • q1=*(p1+56);*(q1+1)=*(p1+48);*(q1+2)=*(p1+40);*(q1+3)=*(p1+32);*(q1+4)=*(p1+24);*(q1+5)=*(p1+16);*(q1+6)=*(p1+8);
  • (q1+7)=*(p1);*(q1+8)=*(p1+57);*(q1+9)=*(p1+49);*(q1+10)=*(p1+41);*(q1+11)=*(p1+33);*(q1+12)=*(p1+25);*(q1+13)=*(p1+17);
  • (q1+14)=*(p1+9);*(q1+15)=*(p1+1);*(q1+16)=*(p1+58);*(q1+17)=*(p1+50);*(q1+18)=*(p1+42);*(q1+19)=*(p1+34);*(q1+20)=*(p1+26);
  • (q1+21)=*(p1+18);*(q1+22)=*(p1+10);*(q1+23)=*(p1+2);*(q1+24)=*(p1+59);*(q1+25)=*(p1+51);*(q1+26)=*(p1+43);*(q1+27)=*(p1+35);
  • (q1+28)=*(p1+62);*(q1+29)=*(p1+54);*(q1+30)=*(p1+46);*(q1+31)=*(p1+38);*(q1+32)=*(p1+30);*(q1+33)=*(p1+22);*(q1+34)=*(p1+14);
  • (q1+35)=*(p1+6);*(q1+36)=*(p1+61);*(q1+37)=*(p1+53);*(q1+38)=*(p1+45);*(q1+39)=*(p1+37);*(q1+40)=*(p1+29);*(q1+41)=*(p1+21);
  • (q1+42)=*(p1+13);*(q1+43)=*(p1+5);*(q1+44)=*(p1+60);*(q1+45)=*(p1+52);*(q1+46)=*(p1+44);*(q1+47)=*(p1+36);*(q1+48)=*(p1+28);
  • (q1+49)=*(p1+20);*(q1+50)=*(p1+12);*(q1+51)=*(p1+4);*(q1+52)=*(p1+27);*(q1+53)=*(p1+19);*(q1+54)=*(p1+11);*(q1+55)=*(p1+3);
} //-------------Permutation de 56bits en 48 bits void pc2(int *a,int *b) //a de dimension 56 et b de dimension 48 { int *p, *q; p=(int*)malloc(56*sizeof(int)); q=(int*)malloc(48*sizeof(int)); p=a;q=b;
  • q=*(p+13); *(q+1)=*(p+16);*(q+2)=*(p+10);*(q+3)=*(p+23);*(q+4)=*p;*(q+5)=*(p+4);
  • (q+6)=*(p+2); *(q+7)=*(p+27);*(q+8)=*(p+14);*(q+9)=*(p+5);*(q+10)=*(p+20);*(q+11)=*(p+9);
  • (q+12)=*(p+22);*(q+13)=*(p+18);*(q+14)=*(p+11);*(q+15)=*(p+3);*(q+16)=*(p+25);*(q+17)=*(p+7);
  • (q+18)=*(p+15);*(q+19)=*(p+6);*(q+20)=*(p+26);*(q+21)=*(p+19);*(q+22)=*(p+12);*(q+23)=*(p+1);
  • (q+24)=*(p+40);*(q+25)=*(p+51);*(q+26)=*(p+30);*(q+27)=*(p+36);*(q+28)=*(p+46);*(q+29)=*(p+54);
  • (q+30)=*(p+29);*(q+31)=*(p+39);*(q+32)=*(p+50);*(q+33)=*(p+44);*(q+34)=*(p+32);*(q+35)=*(p+47);
  • (q+36)=*(p+43);*(q+37)=*(p+48);*(q+38)=*(p+38);*(q+39)=*(p+55);*(q+40)=*(p+33);*(q+41)=*(p+52);
  • (q+42)=*(p+45);*(q+43)=*(p+41);*(q+44)=*(p+49);*(q+45)=*(p+35);*(q+46)=*(p+28);*(q+47)=*(p+31);
} //--------------------permet d'avoir 48bits à partir de 32 bits void expansion(int *b,int *a) //a de dimension 32 b de dimension 48 { int *p2, *q2; p2=(int*)malloc(32*sizeof(int)); q2=(int*)malloc(48*sizeof(int)); p2=b;q2=a;
  • q2=*(p2+31);*(q2+1)=*(p2+0);*(q2+2)=*(p2+1);*(q2+3)=*(p2+2);*(q2+4)=*(p2+3);*(q2+5)=*(p2+4);
  • (q2+6)=*(p2+3);*(q2+7)=*(p2+4);*(q2+8)=*(p2+5);*(q2+9)=*(p2+6);*(q2+10)=*(p2+7);*(q2+11)=*(p2+8);
  • (q2+12)=*(p2+7);*(q2+13)=*(p2+8);*(q2+14)=*(p2+9);*(q2+15)=*(p2+10);*(q2+16)=*(p2+11);*(q2+17)=*(p2+12);
  • (q2+18)=*(p2+11);*(q2+19)=*(p2+12);*(q2+20)=*(p2+13);*(q2+21)=*(p2+14);*(q2+22)=*(p2+15);*(q2+23)=*(p2+16);
  • (q2+24)=*(p2+15);*(q2+25)=*(p2+16);*(q2+26)=*(p2+17);*(q2+27)=*(p2+18);*(q2+28)=*(p2+19);*(q2+29)=*(p2+20);
  • (q2+30)=*(p2+19);*(q2+31)=*(p2+20);*(q2+32)=*(p2+21);*(q2+33)=*(p2+22);*(q2+34)=*(p2+23);*(q2+35)=*(p2+24);
  • (q2+36)=*(p2+23);*(q2+37)=*(p2+24);*(q2+38)=*(p2+25);*(q2+39)=*(p2+26);*(q2+40)=*(p2+27);*(q2+41)=*(p2+28);
  • (q2+42)=*(p2+27);*(q2+43)=*(p2+28);*(q2+44)=*(p2+29);*(q2+45)=*(p2+30);*(q2+46)=*(p2+31);*(q2+47)=*p2;
} //---------------------permet diviser les 48 bits de cles divercifier en deux tableaux de 28 bits void division (int *b ,int *g, int *d, int n) { int *a, *p,*q; a=b; p=g; q=d; for (p=g; p<g+n; p++) {
  • p=*a;
a++; } a= b+n; for (q=d; q<d+n; q++) {
  • q=*a;
a++; } } //---------------permet la rotation vers le gauche de tableau a en fonction de son tour r void rotation ( int *a, int r)// a est de dimension 28 et r est le nombre de tour du clé { int *p, aux; p= a; aux = *p; for ( p=a ;p<a+27 ; p++) {
  • p=*(p+1);
}
  • (a+27)= aux;
if ((r!= 1)&&(r!= 2)&&(r!= 9)&&(r!= 16)) { p= a; aux = *p; for ( p=a ;p<a+27 ; p++) {
  • p=*(p+1);
}
  • (a+27)= aux;
} } //////////////////////////////////////FONCTION DE GENERATION DU CLES/////////////// //-----------Permet de générer les cles utiliser pour le chiffrement void generation (int *b, int *cles,int ronde,int etat) // cles table contenant les 16 cles; si etat=1, on va afficher les itirations { int i,j,k,*p,*q,*t,*a,*g,*d,*n, t1[56]; char *aff_hex,*aff_hex1; p=cles; g=(int*)malloc(28*sizeof(int)); aff_hex=(char*)malloc(7*sizeof(char)); aff_hex1=(char*)malloc(13*sizeof(char)); d=(int*)malloc(28*sizeof(int)); t=(int*)malloc(56*sizeof(int)); q=(int*)malloc(56*sizeof(int)); a=(int*)malloc(48*sizeof(int)); n=(int*)malloc(48*sizeof(int)); //ronde=(int*)malloc(1*sizeof(int)); pc1 (b,t);// t est de 56 bits division (t,g,d,28); if (etat==1) { printf ("-----------------------------------------------------\n"); printf ("C0: "); affiche_tab(g,1,28); convBinHex28(g,aff_hex); printf (" = "); puts (aff_hex); printf ("D0: "); affiche_tab(d,1,28); convBinHex28(d,aff_hex); printf (" = "); puts (aff_hex); printf ("-----------------------------------------------------\n"); } for (i=1; i<=ronde;i++) { rotation(g,i); rotation(d,i); if (etat==1) { printf ("C%d: ",i); affiche_tab(g,1,28); convBinHex28(g,aff_hex); printf (" = "); puts (aff_hex); printf ("D%d: ",i); affiche_tab(d,1,28); convBinHex28(d,aff_hex); printf (" = "); puts (aff_hex); } k=0; for (j=0;j<56;j++) { if (j<28) t1[j]=*(g+j); else { t1[j]=*(d+k); k++ ; } } q=t1; pc2 (q,a);// a est 48 bits n=a; int y; for(n=a;n<a+48;n++) {
  • p=*n;
p++; } if (etat==1) { printf ("K%d: ",i); affiche_tab(a,1,48); convBinHex48(a,aff_hex1); printf (" = "); puts(aff_hex1); printf ("\n-----------------------------------------------------\n"); } } if (etat==1) printf ("les iterations de cles sont termines........\n"); } ////////////////////////////////////////////////////////////////////////////////// //------------Permutation initiale de bloc de 64bits void pi(int *a,int *b)//a de dimension 64 bits permutation initiale { int *p, *q; p=(int*)malloc(64*sizeof(int)); q=(int*)malloc(64*sizeof(int)); p=a;q=b;
  • q=*(p+57);*(q+1)=*(p+49);*(q+2)=*(p+41);*(q+3)=*(p+33);*(q+4)=*(p+25);*(q+5)=*(p+17);*(q+6)=*(p+9);*(q+7)=*(p+1);
  • (q+8)=*(p+59);*(q+9)=*(p+51);*(q+10)=*(p+43);*(q+11)=*(p+35);*(q+12)=*(p+27);*(q+13)=*(p+19);*(q+14)=*(p+11);*(q+15)=*(p+3);
  • (q+16)=*(p+61);*(q+17)=*(p+53);*(q+18)=*(p+45);*(q+19)=*(p+37);*(q+20)=*(p+29);*(q+21)=*(p+21);*(q+22)=*(p+13);*(q+23)=*(p+5);
  • (q+24)=*(p+63);*(q+25)=*(p+55);*(q+26)=*(p+47);*(q+27)=*(p+39);*(q+28)=*(p+31);*(q+29)=*(p+23);*(q+30)=*(p+15);*(q+31)=*(p+7);
  • (q+32)=*(p+56);*(q+33)=*(p+48);*(q+34)=*(p+40);*(q+35)=*(p+32);*(q+36)=*(p+24);*(q+37)=*(p+16);*(q+38)=*(p+8);*(q+39)=*(p+0);
  • (q+40)=*(p+58);*(q+41)=*(p+50);*(q+42)=*(p+42);*(q+43)=*(p+34);*(q+44)=*(p+26);*(q+45)=*(p+18);*(q+46)=*(p+10);*(q+47)=*(p+2);
  • (q+48)=*(p+60);*(q+49)=*(p+52);*(q+50)=*(p+44);*(q+51)=*(p+36);*(q+52)=*(p+28);*(q+53)=*(p+20);*(q+54)=*(p+12);*(q+55)=*(p+4);
  • (q+56)=*(p+62);*(q+57)=*(p+54);*(q+58)=*(p+46);*(q+59)=*(p+38);*(q+60)=*(p+30);*(q+61)=*(p+22);*(q+62)=*(p+14);*(q+63)=*(p+6);
} //------------Permutation finale de bloc de 64bits void pf(int *a,int *b)//a de dimension 64 bits permutation FINALE { int *p, *q; p=(int*)malloc(64*sizeof(int)); q=(int*)malloc(64*sizeof(int)); p=a;q=b;
  • q=*(p+39); *(q+1)=*(p+7); *(q+2)=*(p+47);*(q+3)=*(p+15);*(q+4)=*(p+55);*(q+5)=*(p+23);*(q+6)=*(p+63);*(q+7)=*(p+31);
  • (q+8)=*(p+38); *(q+9)=*(p+6); *(q+10)=*(p+46);*(q+11)=*(p+14);*(q+12)=*(p+54);*(q+13)=*(p+22);*(q+14)=*(p+62);*(q+15)=*(p+30);
  • (q+16)=*(p+37);*(q+17)=*(p+5); *(q+18)=*(p+45);*(q+19)=*(p+13);*(q+20)=*(p+53);*(q+21)=*(p+21);*(q+22)=*(p+61);*(q+23)=*(p+29);
  • (q+24)=*(p+36);*(q+25)=*(p+4); *(q+26)=*(p+44);*(q+27)=*(p+12);*(q+28)=*(p+52);*(q+29)=*(p+20);*(q+30)=*(p+60);*(q+31)=*(p+28);
  • (q+32)=*(p+35);*(q+33)=*(p+3); *(q+34)=*(p+43);*(q+35)=*(p+11);*(q+36)=*(p+51);*(q+37)=*(p+19);*(q+38)=*(p+59);*(q+39)=*(p+27);
  • (q+40)=*(p+34);*(q+41)=*(p+2); *(q+42)=*(p+42);*(q+43)=*(p+10);*(q+44)=*(p+50);*(q+45)=*(p+18);*(q+46)=*(p+58);*(q+47)=*(p+26);
  • (q+48)=*(p+33);*(q+49)=*(p+1); *(q+50)=*(p+41);*(q+51)=*(p+9);*(q+52)=*(p+49);*(q+53)=*(p+17);*(q+54)=*(p+57);*(q+55)=*(p+25);
  • (q+56)=*(p+32);*(q+57)=*(p+0); *(q+58)=*(p+40);*(q+59)=*(p+8);*(q+60)=*(p+48);*(q+61)=*(p+16);*(q+62)=*(p+56);*(q+63)=*(p+24);
} //----------permet la permutation de la résultat de s-box void pp(int *a,int *b)//a de dimension 32 bits permutation p { int *p, *q; p=(int*)malloc(32*sizeof(int)); q=(int*)malloc(32*sizeof(int)); p=a; q=b;
  • q=*(p+15); *(q+1)=*(p+6); *(q+2)=*(p+19); *(q+3)=*(p+20);
  • (q+4)=*(p+28); *(q+5)=*(p+11); *(q+6)=*(p+27); *(q+7)=*(p+16);
  • (q+8)=*p; *(q+9)=*(p+14); *(q+10)=*(p+22); *(q+11)=*(p+25);
  • (q+12)=*(p+4); *(q+13)=*(p+17); *(q+14)=*(p+30); *(q+15)=*(p+9);
  • (q+16)=*(p+1); *(q+17)=*(p+7); *(q+18)=*(p+23); *(q+19)=*(p+13);
  • (q+20)=*(p+31); *(q+21)=*(p+26); *(q+22)=*(p+2); *(q+23)=*(p+8);
  • (q+24)=*(p+18); *(q+25)=*(p+12); *(q+26)=*(p+29); *(q+27)=*(p+5);
  • (q+28)=*(p+21); *(q+29)=*(p+10); *(q+30)=*(p+3); *(q+31)=*(p+24);
} //-----------------convertir de binaire à la base dicimale void convertBinDec (int *a, int *l , int *c )// a est de 6 bits {
  • l= *(a+5)+*a*2;
  • c= *(a+4)+*(a+3)*2+*(a+2)*4+*(a+1)*8;
} //--------------------permet d'avoir 32 bits à partir de 48bits void s_box(int *a ,int *b)// a de 48 et b de 32 { int s1[4][16],s2[4][16],s8[4][16],s3[4][16],s4[4][16],s5[4][16],s6[4][16],s7[4][16]; int s,i,k,j, *h,*p,*q,*r,*l,*c; p=(int*)malloc(48*sizeof(int)); q=(int*)malloc(6*sizeof(int)); h=(int*)malloc(48*sizeof(int)); r=(int*)malloc(64*sizeof(int)); l=(int*)malloc(1*sizeof(int)); c=(int*)malloc(1*sizeof(int)); s1[0][0]=14; s1[0][1]=4; s1[0][2]=13; s1[0][3]=1; s1[0][4]=2; s1[0][5]=15; s1[0][6]=11; s1[0][7]=8; s1[0][8]=3; s1[0][9]=10; s1[0][10]=6; s1[0][11]=12; s1[0][12]=5; s1[0][13]=9; s1[0][14]=0; s1[0][15]=7; s1[1][0]=0; s1[1][1]=15; s1[1][2]=7; s1[1][3]=4; s1[1][4]=14; s1[1][5]=2; s1[1][6]=13; s1[1][7]=1; s1[1][8]=10; s1[1][9]=6; s1[1][10]=12; s1[1][11]=11; s1[1][12]=9; s1[1][13]=5; s1[1][14]=3; s1[1][15]=8; s1[2][0]=4; s1[2][1]=1; s1[2][2]=14; s1[2][3]=8; s1[2][4]=13; s1[2][5]=6; s1[2][6]=2; s1[2][7]=11; s1[2][8]=15; s1[2][9]=12; s1[2][10]=9; s1[2][11]=7; s1[2][12]=3; s1[2][13]=10; s1[2][14]=5; s1[2][15]=0; s1[3][0]=15; s1[3][1]=12; s1[3][2]=8; s1[3][3]=2; s1[3][4]=4; s1[3][5]=9; s1[3][6]=1; s1[3][7]=7; s1[3][8]=5; s1[3][9]=11; s1[3][10]=3; s1[3][11]=14; s1[3][12]=10; s1[3][13]=0; s1[3][14]=6; s1[3][15]=13; s2[0][0]=15; s2[0][1]=1; s2[0][2]=8; s2[0][3]=14; s2[0][4]=6; s2[0][5]=11; s2[0][6]=3; s2[0][7]=4; s2[0][8]=9; s2[0][9]=7; s2[0][10]=2; s2[0][11]=13; s2[0][12]=12; s2[0][13]=0; s2[0][14]=5; s2[0][15]=10; s2[1][0]=3; s2[1][1]=13; s2[1][2]=4; s2[1][3]=7; s2[1][4]=15; s2[1][5]=2; s2[1][6]=8; s2[1][7]=14; s2[1][8]=12; s2[1][9]=0; s2[1][10]=1; s2[1][11]=10; s2[1][12]=6; s2[1][13]=9; s2[1][14]=11; s2[1][15]=5; s2[2][0]=0; s2[2][1]=14; s2[2][2]=7; s2[2][3]=11; s2[2][4]=10; s2[2][5]=4; s2[2][6]=13; s2[2][7]=1; s2[2][8]=5; s2[2][9]=8; s2[2][10]=12; s2[2][11]=6; s2[2][12]=9; s2[2][13]=3; s2[2][14]=2; s2[2][15]=15; s2[3][0]=13; s2[3][1]=8; s2[3][2]=10; s2[3][3]=1; s2[3][4]=3; s2[3][5]=15; s2[3][6]=4; s2[3][7]=2; s2[3][8]=11; s2[3][9]=6; s2[3][10]=7; s2[3][11]=12; s2[3][12]=0; s2[3][13]=5; s2[3][14]=14; s2[3][15]=9; s3[0][0]=10; s3[0][1]=0; s3[0][2]=9; s3[0][3]=14; s3[0][4]=6; s3[0][5]=3; s3[0][6]=15; s3[0][7]=5; s3[0][8]=1; s3[0][9]=13; s3[0][10]=12; s3[0][11]=7; s3[0][12]=11; s3[0][13]=4; s3[0][14]=2; s3[0][15]=8; s3[1][0]=13; s3[1][1]=7; s3[1][2]=0; s3[1][3]=9; s3[1][4]=3; s3[1][5]=4; s3[1][6]=6; s3[1][7]=10; s3[1][8]=2; s3[1][9]=8; s3[1][10]=5; s3[1][11]=14; s3[1][12]=12; s3[1][13]=11; s3[1][14]=15; s3[1][15]=1; s3[2][0]=13; s3[2][1]=6; s3[2][2]=4; s3[2][3]=9; s3[2][4]=8; s3[2][5]=15; s3[2][6]=3; s3[2][7]=0; s3[2][8]=11; s3[2][9]=1; s3[2][10]=2; s3[2][11]=12; s3[2][12]=5; s3[2][13]=10; s3[2][14]=14; s3[2][15]=7; s3[3][0]=1; s3[3][1]=10; s3[3][2]=13; s3[3][3]=0; s3[3][4]=6; s3[3][5]=9; s3[3][6]=8; s3[3][7]=7; s3[3][8]=4; s3[3][9]=15; s3[3][10]=14; s3[3][11]=3; s3[3][12]=11; s3[3][13]=5; s3[3][14]=2; s3[3][15]=12; s4[0][0]=7; s4[0][1]=13; s4[0][2]=14; s4[0][3]=3; s4[0][4]=0; s4[0][5]=6; s4[0][6]=9; s4[0][7]=10; s4[0][8]=1; s4[0][9]=2; s4[0][10]=8; s4[0][11]=5; s4[0][12]=11; s4[0][13]=12; s4[0][14]=4; s4[0][15]=15; s4[1][0]=13; s4[1][1]=8; s4[1][2]=11; s4[1][3]=5; s4[1][4]=6; s4[1][5]=15; s4[1][6]=0; s4[1][7]=3; s4[1][8]=4; s4[1][9]=7; s4[1][10]=2; s4[1][11]=12; s4[1][12]=1; s4[1][13]=10; s4[1][14]=14; s4[1][15]=9; s4[2][0]=10; s4[2][1]=6; s4[2][2]=9; s4[2][3]=0; s4[2][4]=12; s4[2][5]=11; s4[2][6]=7; s4[2][7]=13; s4[2][8]=15; s4[2][9]=1; s4[2][10]=3; s4[2][11]=14; s4[2][12]=5; s4[2][13]=2; s4[2][14]=8; s4[2][15]=4; s4[3][0]=3; s4[3][1]=15; s4[3][2]=0; s4[3][3]=6; s4[3][4]=10; s4[3][5]=1; s4[3][6]=13; s4[3][7]=8; s4[3][8]=9; s4[3][9]=4; s4[3][10]=5; s4[3][11]=11; s4[3][12]=12; s4[3][13]=7; s4[3][14]=2; s4[3][15]=14; s5[0][0]=2; s5[0][1]=12; s5[0][2]=4; s5[0][3]=1; s5[0][4]=7; s5[0][5]=10; s5[0][6]=11; s5[0][7]=6; s5[0][8]=8; s5[0][9]=5; s5[0][10]=3; s5[0][11]=15; s5[0][12]=13; s5[0][13]=0; s5[0][14]=14; s5[0][15]=9; s5[1][0]=14; s5[1][1]=11; s5[1][2]=2; s5[1][3]=12; s5[1][4]=4; s5[1][5]=7; s5[1][6]=13; s5[1][7]=1; s5[1][8]=5; s5[1][9]=0; s5[1][10]=15; s5[1][11]=10; s5[1][12]=3; s5[1][13]=9; s5[1][14]=8; s5[1][15]=6; s5[2][0]=4; s5[2][1]=2; s5[2][2]=1; s5[2][3]=11; s5[2][4]=10; s5[2][5]=13; s5[2][6]=7; s5[2][7]=8; s5[2][8]=15; s5[2][9]=9; s5[2][10]=12; s5[2][11]=5; s5[2][12]=6; s5[2][13]=3; s5[2][14]=0; s5[2][15]=14; s5[3][0]=11; s5[3][1]=8; s5[3][2]=12; s5[3][3]=7; s5[3][4]=1; s5[3][5]=14; s5[3][6]=2; s5[3][7]=13; s5[3][8]=6; s5[3][9]=15; s5[3][10]=0; s5[3][11]=9; s5[3][12]=10; s5[3][13]=4; s5[3][14]=5; s5[3][15]=3; s6[0][0]=12; s6[0][1]=1; s6[0][2]=10; s6[0][3]=15; s6[0][4]=9; s6[0][5]=2; s6[0][6]=6; s6[0][7]=8; s6[0][8]=0; s6[0][9]=13; s6[0][10]=3; s6[0][11]=4; s6[0][12]=14; s6[0][13]=7; s6[0][14]=5; s6[0][15]=11; s6[1][0]=10; s6[1][1]=15; s6[1][2]=4; s6[1][3]=2; s6[1][4]=7; s6[1][5]=12; s6[1][6]=9; s6[1][7]=5; s6[1][8]=6; s6[1][9]=1; s6[1][10]=13; s6[1][11]=14; s6[1][12]=0; s6[1][13]=11; s6[1][14]=3; s6[1][15]=8; s6[2][0]=9; s6[2][1]=14; s6[2][2]=15; s6[2][3]=5; s6[2][4]=2; s6[2][5]=8; s6[2][6]=12; s6[2][7]=3; s6[2][8]=7; s6[2][9]=0; s6[2][10]=4; s6[2][11]=10; s6[2][12]=1; s6[2][13]=13; s6[2][14]=11; s6[2][15]=6; s6[3][0]=4; s6[3][1]=3; s6[3][2]=2; s6[3][3]=12; s6[3][4]=9; s6[3][5]=5; s6[3][6]=15; s6[3][7]=10; s6[3][8]=11; s6[3][9]=14; s6[3][10]=1; s6[3][11]=7; s6[3][12]=6; s6[3][13]=0; s6[3][14]=8; s6[3][15]=13; s7[0][0]=4; s7[0][1]=11; s7[0][2]=2; s7[0][3]=14; s7[0][4]=15; s7[0][5]=0; s7[0][6]=8; s7[0][7]=13; s7[0][8]=3; s7[0][9]=12; s7[0][10]=9; s7[0][11]=7; s7[0][12]=5; s7[0][13]=10; s7[0][14]=6; s7[0][15]=1; s7[1][0]=13; s7[1][1]=0; s7[1][2]=11; s7[1][3]=7; s7[1][4]=4; s7[1][5]=9; s7[1][6]=1; s7[1][7]=10; s7[1][8]=14; s7[1][9]=3; s7[1][10]=5; s7[1][11]=12; s7[1][12]=2; s7[1][13]=15; s7[1][14]=8; s7[1][15]=6; s7[2][0]=1; s7[2][1]=4; s7[2][2]=11; s7[2][3]=13; s7[2][4]=12; s7[2][5]=3; s7[2][6]=7; s7[2][7]=14; s7[2][8]=10; s7[2][9]=15; s7[2][10]=6; s7[2][11]=8; s7[2][12]=0; s7[2][13]=5; s7[2][14]=9; s7[2][15]=2; s7[3][0]=6; s7[3][1]=11; s7[3][2]=13; s7[3][3]=8; s7[3][4]=1; s7[3][5]=4; s7[3][6]=10; s7[3][7]=7; s7[3][8]=9; s7[3][9]=5; s7[3][10]=0; s7[3][11]=15; s7[3][12]=14; s7[3][13]=2; s7[3][14]=3; s7[3][15]=12; s8[0][0]=13; s8[0][1]=2; s8[0][2]=8; s8[0][3]=4; s8[0][4]=6; s8[0][5]=15; s8[0][6]=11; s8[0][7]=1; s8[0][8]=10; s8[0][9]=9; s8[0][10]=3; s8[0][11]=14; s8[0][12]=5; s8[0][13]=0; s8[0][14]=12; s8[0][15]=7; s8[1][0]=1; s8[1][1]=15; s8[1][2]=13; s8[1][3]=8; s8[1][4]=10; s8[1][5]=3; s8[1][6]=7; s8[1][7]=4; s8[1][8]=12; s8[1][9]=5; s8[1][10]=6; s8[1][11]=11; s8[1][12]=0; s8[1][13]=14; s8[1][14]=9; s8[1][15]=2; s8[2][0]=7; s8[2][1]=11; s8[2][2]=4; s8[2][3]=1; s8[2][4]=9; s8[2][5]=12; s8[2][6]=14; s8[2][7]=2; s8[2][8]=0; s8[2][9]=6; s8[2][10]=10; s8[2][11]=13; s8[2][12]=15; s8[2][13]=3; s8[2][14]=5; s8[2][15]=8; s8[3][0]=2; s8[3][1]=1; s8[3][2]=14; s8[3][3]=7; s8[3][4]=4; s8[3][5]=10; s8[3][6]=8; s8[3][7]=13; s8[3][8]=15; s8[3][9]=12; s8[3][10]=9; s8[3][11]=10; s8[3][12]=3; s8[3][13]=5; s8[3][14]=6; s8[3][15]=11; h=b; s=0 ; i=60; /////////////////// //for (q=a;q<a+6;q++) for (j=0;j<6;j++) {
  • (q+j)=*(a+j);
} convertBinDec(q,l,c); convert (s1[*l][*c],r); for (s=0;s<4;s++) {
  • (h+s)=*(r+i);
i++; } //////////////////// i=60; k=0; /////////////////// for (j=6;j<12;j++) {
  • (q+k)=*(a+j);
k++; } convertBinDec(q,l,c); convert (s2[*l][*c],r); for (s=4;s<8;s++) {
  • (h+s)=*(r+i);
i++; } //////////////////// i=60; k=0; /////////////////// for (j=12;j<18;j++) {
  • (q+k)=*(a+j);
k++; } convertBinDec(q,l,c); convert (s3[*l][*c],r); for (s=8;s<12;s++) {
  • (h+s)=*(r+i);
i++; } //////////////////// i=60; k=0; /////////////////// for (j=18;j<24;j++) {
  • (q+k)=*(a+j);
k++; } convertBinDec(q,l,c); convert (s4[*l][*c],r); for (s=12;s<16;s++) {
  • (h+s)=*(r+i);
i++; } //////////////////// i=60; k=0; /////////////////// for (j=24;j<30;j++) {
  • (q+k)=*(a+j);
k++; } convertBinDec(q,l,c); convert (s5[*l][*c],r); for (s=16;s<20;s++) {
  • (h+s)=*(r+i);
i++; } //////////////////// i=60; k=0; /////////////////// for (j=30;j<36;j++) {
  • (q+k)=*(a+j);
k++; } convertBinDec(q,l,c); convert (s6[*l][*c],r); for (s=20;s<24;s++) {
  • (h+s)=*(r+i);
i++; } //////////////////// i=60; k=0; /////////////////// for (j=36;j<42;j++) {
  • (q+k)=*(a+j);
k++; } convertBinDec(q,l,c); convert (s7[*l][*c],r); for (s=24;s<28;s++) {
  • (h+s)=*(r+i);
i++; } //////////////////////// i=60; k=0; /////////////////// for (j=42;j<48;j++) {
  • (q+k)=*(a+j);
k++; } convertBinDec(q,l,c); convert (s8[*l][*c],r); for (s=28;s<32;s++) {
  • (h+s)=*(r+i);
i++; } //////////////////// } //------------retourne la foncion xor entre deux bits int xor (int a, int b) { if (a==b) return 0; else return 1; } //------------------mettre le resultat de la fonction xor entre les deux tables texte et cles dans resultat void exor (int *texte , int *cles, int *resultat, int n)// tous de n bits { int *p,*q,*v,i; p=(int*)malloc(n*sizeof(int)); q=(int*)malloc(n*sizeof(int)); v=(int*)malloc(n*sizeof(int)); p=texte; q=cles; v=resultat; for (i=0; i<n;i++)
  • (v+i)=xor(*(p+i),*(q+i));
} //-------------fonction ff permet de combiner la partie droite de texte avec le cles divercifier //etat(1:affiche les iteration, 0:donner le resultat directement) void ff(int *texte,int *cles,int *resultat,int etat)// texte de 32 bits cles de 48 bits resultat 32 bits { int *p,*q,*texte48,*r,*rr; char *aff_hex,*aff_hex1,*aff_hex2,*aff_hex3; aff_hex=(char*)malloc(13*sizeof(char)); aff_hex1=(char*)malloc(13*sizeof(char)); aff_hex2=(char*)malloc(13*sizeof(char)); aff_hex3=(char*)malloc(8*sizeof(char)); r=(int*)malloc(48*sizeof(int)); rr=(int*)malloc(32*sizeof(int)); texte48=(int*)malloc(49*sizeof(int)); p=(int*)malloc(48*sizeof(int)); q=(int*)malloc(48*sizeof(int)); expansion(texte,texte48); exor(texte48,cles,r,48); s_box(r,rr); pp(rr,resultat); if ( etat == 1) { printf(" E(A) :"); affiche_tab(texte48,1,48); convBinHex48(texte48,aff_hex); printf (" = "); puts (aff_hex); printf(" J :"); affiche_tab(cles,1,48); convBinHex48(cles,aff_hex1); printf (" = "); puts (aff_hex1); printf(" E(A)+J :"); affiche_tab(r,1,48); convBinHex48(r,aff_hex2); printf (" = "); puts (aff_hex2); printf(" C :"); affiche_tab(rr,1,32); convBinHex32(rr,aff_hex3); printf (" = "); puts (aff_hex3); printf("\n"); printf ("\n-----------------------------------------------------\n"); } } ///////////////////////////////////////////////////////////////////////////////////////////////////////// //---------------fonction globale qui permet de crypte le texte donner en parametre en utilisant le cles //le resutat est envoyer en tcrypte. mode (DES ou DEA),ronde(nombre de ronde),etat(1:affiche les iteration, 0:donner le resultat directement) void cryptage(int *texte,int *cles,int *tcrypte, int mode, int ronde,int etat) { int mod,*t2,*cles2,i,*aux,*cles1,j,*r,*rr,*bloc,k=0,*gauche,*droite; char *aff_hex, *aff_hex1,*aff_hex5, *aff_hex11, *aff_hex3, *aff_hex55; mod=1; aff_hex=(char*)malloc(8*sizeof(char)); aff_hex1=(char*)malloc(8*sizeof(char)); aff_hex5=(char*)malloc(8*sizeof(char)); aff_hex11=(char*)malloc(8*sizeof(char)); aff_hex3=(char*)malloc(32*sizeof(char)); aff_hex55=(char*)malloc(32*sizeof(char)); t2=(int*)malloc(64*sizeof(int)); bloc=(int*)malloc(64*sizeof(int)); gauche=(int*)malloc(33*sizeof(int)); droite=(int*)malloc(33*sizeof(int)); cles2=(int*)malloc(48*sizeof(int)); aux=(int*)malloc(49*sizeof(int)); rr=(int*)malloc(49*sizeof(int)); r=(int*)malloc(32*sizeof(int)); cles1=(int*)malloc(48*16*sizeof(int)); generation(cles,cles1,ronde,etat); //cles1 est de dimension 16*48 if (mode == 1) { pi(texte,t2); } else { for (j=0;j<64;j++)
  • (t2+j)=*(texte+j);
} division(t2,gauche,droite,32); if (etat == 1) { printf ("\n-----------------------------------------------------\n"); printf ("L0 :"); affiche_tab(gauche,1,32); convBinHex32(gauche,aff_hex3); printf (" = "); puts (aff_hex3); printf ("\n"); printf ("R0 :"); affiche_tab(droite,1,32); convBinHex32(droite,aff_hex55); printf (" = "); puts (aff_hex55); printf("\n"); } for(i=0;i<ronde;i++) { for(j=0;j<32;j++)
  • (aux+j)=*(droite+j);
for(j=0;j<48;j++)
  • (cles2+j)=*(cles1+j+i*48);
ff(droite,cles2,r,etat); exor(r,gauche,rr,32); for(j=0;j<32;j++) {
  • (droite+j)=*(rr+j);
  • (gauche+j)=*(aux+j);
} if (etat == 1) { printf ("L%d :",i+1); affiche_tab(gauche,1,32); convBinHex32(gauche,aff_hex3); printf (" = "); puts (aff_hex3); printf ("R%d :",i+1); affiche_tab(droite,1,32); convBinHex32(droite,aff_hex55); printf (" = "); puts (aff_hex55); printf("\n"); } } k=0; for (j=0;j<64;j++) { if (j<32)
  • (bloc+j)=*(droite+j);
else {
  • (bloc+j)=*(gauche+k);
k++; } } if (mode == 1) { pf(bloc,tcrypte); } else { for (j=0;j<64;j++)
  • (tcrypte+j)=*(bloc+j);
} printf("\n \n texte cryptee : \n"); //////////////////////////////////////////////////////////////// } void menu() { //LE BOUTON NOUVEAU EST SELECTIONNE PAR DEFAULT. textcolor(15); printf("ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\n"); printf("³ ³\n"); printf("³ Bien venue sur le progamme ³\n"); printf("³ ³\n"); printf("³ DES ³\n"); printf("³ ³\n"); printf("³ (DATA ENCRYPTION STANDARD) ³\n"); printf("³ ³\n"); printf("ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\n"); //LEGENDE printf("\n\n\n\n\nChoisissez ce que vous voulez faire.\n\n"); textbackground(9); cprintf("\n\n\n\r h : Aide \n"); printf ("\n"); cprintf("\r k : Cles \n"); printf ("\n"); cprintf("\r t : Texte \n"); printf ("\n"); cprintf("\r r : Nombre de rondes \n"); printf ("\n"); cprintf("\r m : Mode de chiffrement (DES = 1, DEA = 0)\n"); printf ("\n"); cprintf("\r a : Affiche detaille \n"); printf ("\n"); cprintf("\r v : Information Supplementaire \n"); printf ("\n"); cprintf("\r b : Retour au Menu Principale \n"); printf ("\n"); cprintf("\r q : Quitter \n\n\n\n\n"); //SELECTION DES CHOIX. } //------------retourne le resultat de recherche du caractere f dans le table t declare comme parametre globale int recherche(char f){ int i,r=0; for(i=0;i<16;i++) if (t[i]==f) r=1; return r; } //------------permet de convertir un entier decimale en binaire void convert1 (int d,int *b) { int i,j=3, *p,*q; int div,div2; for(p=b;p<b+4;p++)
  • p=0;
div=d; do { div2 = div / 2;
  • (b+j) =(div - div2*2);
j--; div = div2; } while (j >= 0 && div2 != 0); } //-----------permet de transformer un tableau en hexadecimale en un tableau en binaire int transforme (char *tab,int *tab1) { int *b,*q,*u; char *p; q=(int*)malloc(64*sizeof(int)); p=(char*)malloc(16*sizeof(char)); b=(int*)malloc(4*sizeof(int)); int r=1,a,z; q=tab1; p=tab; for(p=tab;p<tab+16;p++) { if (recherche(*p)==0) { p=tab+16;r=0; } a=(int)*p-48; if (a>=17) a=a-7; convert1(a,b); for(z=0;z<4;z++) {
  • q=*(b+z);
q++; } } return (r); } //---------fonction utiliser dans l'animation void ralentir(void) { int i0; for (i0 = 0; i0 < 1500; i0++){ gotoxy(1,1); cputs(""); } return; } //----------Animation char *bye[] = { "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿", "³ ÛÛÛÛÛ Û Û ÛÛÛÛÛÛ ³", "³ Û Û Û Û Û ³", "³ Û Û Û Û Û ³", "³ Û Û Û Û Û ³", "³ ÛÛÛÛÛ Û ÛÛÛÛÛ ³", "³ Û Û Û Û ³", "³ Û Û Û Û ³", "³ Û Û Û Û ³", "³ ÛÛÛÛÛ Û ÛÛÛÛÛÛ ³", "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´", "³ ESC FIN DU PROGRAMME....................³", "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" }; //----------Animation void effet_aller_retour(int col_depart,int col_fin, int ligne_depart) { int i1, i2; int max_menu = sizeof(bye) / sizeof(bye[0]); // faire sortir le bye vers la droite for (i2 = 0; i2 <= strlen(bye[0]) ; ++i2) { for (i1 = 0; i1 < max_menu ; ++i1) { gotoxy(col_depart,ligne_depart + i1 ); cprintf( "%1s", strlen(bye[i1])+ bye[i1] -i2); } ralentir(); // ralentir l'effet } ralentir(); // temps d'attente // deplacer le bye vers la gauche for (i2 = 0; col_depart-i2 >= col_fin ; ++i2) { for (i1 = 0; i1 < max_menu ; ++i1) { gotoxy(col_depart-i2,ligne_depart + i1 ); cprintf( "%1s ", bye[i1] ); } ralentir(); // ralentir l'effet } ralentir(); // temps d'attente // faire repartir le bye for (i2 = 0; i2 <= strlen(bye[0]) ; ++i2) { for (i1 = 0; i1 < max_menu ; ++i1) { gotoxy(col_fin ,ligne_depart + i1 ); cprintf("%s ",bye[i1] + i2); } ralentir(); // ralentir l'effet } return ; } //----------Animation char *DES[] = { ".......................................", ".ÛÛÛÛÛÛÛ........ÛÛÛÛÛÛÛÛÛ.....ÛÛÛÛÛÛÛÛ.", ".Û......Û.......Û.............Û........", ".Û.......Û......Û.............Û........", ".Û.......Û......Û.............Û........", ".Û........Û.....ÛÛÛÛÛÛÛ.......ÛÛÛÛÛÛÛÛ.", ".Û.......Û......Û....................Û.", ".Û.......Û......Û....................Û.", ".Û......Û.......Û....................Û.", ".ÛÛÛÛÛÛÛ........ÛÛÛÛÛÛÛÛÛ.....ÛÛÛÛÛÛÛÛ.", "......................................." }; //----------Animation void effet2_haut_bas(int col, int ligne_depart,int ligne_fin) { int i1, i2; textbackground(0); // nbre d'element dans le des int max_menu = sizeof(DES) / sizeof(DES[0]); for (i1 = 0; i1 < max_menu ; ++i1) { for (i2 = 0; i2 < ligne_fin - i1 ; ++i2) { gotoxy(col,ligne_depart + i2); cprintf("%s",DES[ (max_menu -1) -i1]); ralentir(); // ralentir l'effet gotoxy(col,ligne_depart-1 + i2); cprintf("%48c",'\0'); // ligne vide } } return ; } void main() { //DEBUT DU PROGRAMME. int chargement; char sel, *cle_hex,*def_cle,*txt_hex,*def_txt,*aff_hex; int i,rech,rech1, *p,*q,etat1=0,mode1=1,round =16,*b, *t,*tt,*b1,*a , *gauche, *droite,*cles,*tcry; int *ronde,*etat,*mode,entrer ; b=(int*)malloc(8*8*sizeof(int));//cle binaire cle_hex=(char*)malloc(16*sizeof(char));//cle hexadecimal def_cle=(char*)malloc(16*sizeof(char));//cle hexadecimal par defaut txt_hex=(char*)malloc(16*sizeof(char));//Texte hexadecimal def_txt=(char*)malloc(16*sizeof(char));//Texte hexadecimal par defaut aff_hex=(char*)malloc(16*sizeof(char));//resultat de convertion hexadecimal b1=(int*)malloc(8*8*sizeof(int));//texte tcry=(int*)malloc(8*8*sizeof(int)); mode=(int*)malloc(1*sizeof(int)); etat=(int*)malloc(1*sizeof(int)); ronde =(int*)malloc(1*sizeof(int)); def_cle ="133457799BBCDFF1"; def_txt ="0123456789ABCDEF";
  • ronde =16;
  • etat=1;
  • mode=1;
///////////////////////////////////////////Menu///////////////////// char nom [200]={'R','e','a','l','i','s','e',' ','p','a','r',' ',':','\n','\t','\t','\t','\t','\t','-','A','b','b','a','s','s','i',' ','I','s','s','a','m','\n','\n','\t','\t','\t','\t','\t','-','M','a','b','r','o','u','k',' ','K','h','a','l','e','d','\n','\n','\t','\t','\t','\t','\t','-','O','m','r','a','n','i',' ','S','a','d','e','k','\n'}; int g; //BARRE DE CHARGEMENT. printf ("\n"); textcolor(15); cprintf("Chargement en cours :\n\n\r"); textbackground(11); for(chargement = 0; chargement < 80; chargement++) { cprintf(" "); Sleep(50); } entrer=0; do{ // colonne = 15 ligne_depart = 1 ligne_fin = 24 effet2_haut_bas(18,8, 15); // decouper_haut_bas if (entrer==0) {entrer=1; printf ("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); for(g= 0;g < 80;g++) { printf ("%c",nom[g]);Sleep(50); } printf ("\n\n\n\n"); textcolor(11); textbackground(0); cprintf("SVP Taper une touche pour passer........\r"); }} while(!kbhit()); getch(); system("cls"); menu(); rech =transforme (def_cle,b); rech1 =transforme (def_txt,b1); do { sel = getch (); switch(sel) { //AIDE. case 'h': system("cls"); textbackground(0); system("cls"); printf ("l'objectif de ce programme est la realisation d'une implementation du \n\n cryptosysteme a cles secrtet DES en C\n\n"); printf("Ce projet est realiser par :Abbassi Issam, Mabrouk Khaled,Omrani Sadek \n\n 1er annee cycle de formation d'ingenieurs "); printf("dans le cadre de travaux pratiques de \ncryptographie \n\n"); printf("Date de creation 09/12/2006 "); printf("\n\n\n Plusieurs fonctions disponibles dans ce programme:"); cprintf("\n\n\n\r h : Aide "); printf ("\n"); cprintf("\r k : Cles "); printf ("\n"); cprintf("\r t : Texte "); printf ("\n"); cprintf("\r r : Nombre de rondes "); printf ("\n"); cprintf("\r m : Mode de chiffrement (DES = 1, DEA = 0)"); printf ("\n"); cprintf("\r a : Affiche detaille "); printf ("\n"); cprintf("\r v : Information Supplementaire "); printf ("\n"); cprintf("\r b : Retour au Menu Principale "); cprintf("\r q : Quitter \n\n\n"); textcolor(4); textbackground(0); cprintf("\rREMARQUES \n\n\n\rSi l'utilisateur utilse la fonction de chiffrement sans modifier \n\n \rles parametres de cryptage (cles, texte, nb de ronde.... )\n\n"); cprintf("\rle systeme chiffre avec les valeurs par defaut: \n\n"); cprintf("\rcles = 13345779 9BBCDFF1 \n\n"); cprintf("\rtexte = 0123456789ABCDEF\n\n"); cprintf("\rNombre de ronde = 16 "); break; //CLES. case 'k': system("cls"); textbackground(0); system("cls"); printf("\n Donner votre cles en Hexadicimal : \n\n"); scanf("%s",cle_hex); rech=transforme (cle_hex,b); if (rech ==0) { printf ("\n Desole, Votre cles est non valide SVP verifier votre cles... \n\n Le systeme va choisir le cles par defaut... \n"); rech =transforme (def_cle,b); getch (); system("cls"); textbackground(0); system("cls"); menu (); } else { printf ("\n Cles valide.... \n"); getch (); system("cls"); textbackground(0); system("cls"); menu (); } break; //TEXTE. case 't': system("cls"); textbackground(0); system("cls"); printf("\n Donner votre Texte en Hexadicimal : \n\n"); scanf("%s",txt_hex); rech1=transforme (txt_hex,b1); if (rech1 ==0) { printf ("\n Desole, Votre Texte est non valide SVP verifier votre Texte... \n\n Le systeme va choisir le Texte par defaut... \n"); rech =transforme (def_txt,b1); getch (); system("cls"); textbackground(0); system("cls"); menu (); } else { printf ("\n Texte valide.... \n"); getch (); system("cls"); textbackground(0); system("cls"); menu (); } break; //RONDE. case 'r': do { textbackground(0); system("cls"); printf("\nDonner le nombre de rondes (compris entre 1 et 16:) \n\n"); scanf("%d",ronde); } while ((*ronde <1) || (*ronde >16)); system("cls"); menu(); break; //MODE DE CHIFFREMENT. case 'm': do { textbackground(0); system("cls"); printf ("\n\n Donner SVP le mode du cryptage ( DES = 1 ; DEA = 0 ):\n"); printf("\t"); scanf (" %d",mode); } while ((*mode !=1) && (*mode !=0)); if ( *mode == 1) printf("\n Vous avez choisi le mode DES :\n\n\n"); else printf("\n Vous avez choisi le mode DEA :\n\n\n"); round =*ronde; etat1 =*etat; mode1 =*mode; printf("\n Votre texte en claire est :\n\n"); printf("\n EN BINAIRE :\n"); affiche_tab(b1,1,64); printf("\n EN HEXADECIMALE :\n"); convBinHex64(b1,aff_hex); puts (aff_hex); getch (); cryptage(b1,b,tcry,mode1,round,etat1); printf("\n"); printf("\n EN BINAIRE :\n"); affiche_tab(tcry,1,64); printf("\n EN HEXADECIMALE :\n"); convBinHex64(tcry,aff_hex); puts (aff_hex); break; //INFORMATION SUPPLEMENTAIRE. case 'v': system("cls"); textbackground(0); system("cls"); printf("\n\n\t\tPresentation exhaustive du systeme DES\n\n\n\n"); printf("Ce systeme de chiffrement a cles privee est le plus connu. Un cryptosysteme\n\npermet a deux protagonistes"); printf("de communiquer ensemble sur un canal peu sur lorsqu'\n\nun opposant souhaite espionner cette conversation. Evidemment"); printf("cet opposant ne\n\ndoit pas comprendre les informations qui sont echangees. \n\n\n"); printf("Pour un cryptosysteme on définie les expressions suivantes: \n\n\n"); textcolor(13); textbackground(0); cprintf(" \r- Texte clair :"); printf(" Information que l'emetteur souhaite transmettre au recepteur\n\n\t\t(Ex : texte en francais, donnee numerique etc...).\n\n\n"); cprintf(" \r- Chiffrement :"); printf(" Processus de transformation d?un message M de telle maniere\n\n\t\ta le rendre incomprehensible. Ce processus est base sur une\n\n\t\tfonction de chiffrement E et permet de "); printf("generer ainsi un message\n\n\t\tchiffre C = E(M).\n\n\n"); cprintf(" \r- Dechiffrement: "); printf("Processus de reconstruction du message clair a partir du\n\n\t\tmessage chiffre, base sur une fonction de dechiffrement D.\n"); break; //RETOUR AU MENU PRINCIPALE. case 'b': system("cls"); textbackground(0); system("cls"); menu(); break; //AFFICHE DETAILLES. case 'a': do { textbackground(0); system("cls"); printf ("\n\n vous voulez vraiment afficher les detaille du cryptage ( OUI = 1 ; NON = 0 ):\n\n"); printf("\t"); scanf (" %d",etat); } while ((*etat !=1) && (*etat !=0)); system("cls"); menu (); break; //QUITTER. case 'q': textbackground(0); system("cls"); system("cls"); _setcursortype(_NOCURSOR); textcolor(LIGHTGREEN); gotoxy(30, 3); cprintf("TAPER ESC pour sortir "); do { textcolor(LIGHTCYAN); // colonne depart = 37 colonne fin = 15 ligne depart = 4 effet_aller_retour(37,15, 10); } while (!kbhit()); exit(0); break; } //0 = QUITTER. } while (sel != 'q'); free(tcry); getch(); }

A voir également

Ajouter un commentaire Commentaires
Chatbour Messages postés 71 Date d'inscription jeudi 27 juillet 2006 Statut Membre Dernière intervention 12 juillet 2009 10
14 sept. 2007 à 17:53
jolie de voir un ISSATSien faire autre chose que de se balader dans la cours où dans la buvette ;)
hakimensi Messages postés 2 Date d'inscription mercredi 12 septembre 2007 Statut Membre Dernière intervention 12 septembre 2007
12 sept. 2007 à 15:19
y'a pas mal d'erreur
veux tu verifier j'ai vraient besoin de ton code
Xen0n Messages postés 2 Date d'inscription lundi 31 mai 2004 Statut Membre Dernière intervention 27 mars 2007
27 mars 2007 à 20:06
marche pas chez moi ya pas mal d'erreurs :

Project : Console application
Compiler : GNU GCC Compiler (called directly)
Directory : C:\Fichiers\Projets C\temp\
--------------------------------------------------------------------------------
Switching to target: default
Compiling: main.cpp
main.cpp:572: error: expected unqualified-id before '^' token
main.cpp:572: error: expected `,' or `;' before '^' token
main.cpp: In function `void exor(int*, int*, int*, int)':
main.cpp:591: error: expected primary-expression before '^' token
main.cpp: In function `void menu()':
main.cpp:766: error: `textcolor' undeclared (first use this function)
main.cpp:766: error: (Each undeclared identifier is reported only once for each function it appears in.)
main.cpp:781: error: `textbackground' undeclared (first use this function)
main.cpp:782: error: `cprintf' undeclared (first use this function)
main.cpp: In function `void ralentir()':
main.cpp:869: error: `gotoxy' undeclared (first use this function)
main.cpp:870: error: `cputs' undeclared (first use this function)
main.cpp: In function `void effet_aller_retour(int, int, int)':
main.cpp:901: error: `gotoxy' undeclared (first use this function)
main.cpp:902: error: `cprintf' undeclared (first use this function)
main.cpp: In function `void effet2_haut_bas(int, int, int)':
main.cpp:960: error: `textbackground' undeclared (first use this function)
main.cpp:968: error: `gotoxy' undeclared (first use this function)
main.cpp:969: error: `cprintf' undeclared (first use this function)
main.cpp: At global scope:
main.cpp:982: error: `main' must return `int'
main.cpp: In function `int main(...)':
main.cpp:1012: error: `textcolor' undeclared (first use this function)
main.cpp:1013: error: `cprintf' undeclared (first use this function)
main.cpp:1014: error: `textbackground' undeclared (first use this function)
main.cpp:1245: error: `_NOCURSOR' undeclared (first use this function)
main.cpp:1245: error: `_setcursortype' undeclared (first use this function)
main.cpp:1246: error: `LIGHTGREEN' undeclared (first use this function)
main.cpp:1250: error: `gotoxy' undeclared (first use this function)
main.cpp:1255: error: `LIGHTCYAN' undeclared (first use this function)
main.cpp:1276:2: warning: no newline at end of file
Process terminated with status 1 (0 minutes, 1 seconds)
amrimarouen Messages postés 2 Date d'inscription dimanche 18 février 2007 Statut Membre Dernière intervention 24 février 2007
24 févr. 2007 à 13:37
Salut je suis entrain de réaliser mon premiér Minin-projet et il consiste a cryter-décrypter un texte.
le cryptage en Des que tu as publier sur ce cite est interressant mais j'avais queque probleme:

-unable to open include file ' windows.h '
- 'p' assigned a value that never used
- 'q' assigned a value that never used
je ne sais pas c'est quoi le probleme mais je crois qu'il me faut une bibliotéque qui s'appelle windows.h alors que je ne l'ai pas
et en plus je ne connais pas son utulité.
j'espere que tu me reponds le plus vite possible et si c'est possible tu pourras peut-etre m'expliquer les fonctions et les structres
dans le code source .e Merci .
NB: on utilise le tc: c et non pas le c++.
amrimarouen Messages postés 2 Date d'inscription dimanche 18 février 2007 Statut Membre Dernière intervention 24 février 2007
18 févr. 2007 à 15:27
Merci

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.