bonjour, j'ai ecrit un programme pour le cryptage des fichier; le data encryption standar, en utilisant le language C,il est bien correte en ce qui concerne la syntaxe mais il donne pas les résultats prévus
avant d'executer ce code creéer un fichier dans le meme emplacement que l'executable et le nommer source.txt ,c'est la ou vous pouvez mettre le texte a crypter
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
int ouexclusif(int i,int j)
{ int k;
if(i==0 || j==0){k=0;}if(i==0 || j==1){k=1;}if(i==1 || j==0){k=1;}if(i==1 || j==1){k=0;}return k;
}
void convert_to_binaire(int a,int binaire[8])
{ int i;int temp[8];
for(i=0;i<8;i++){temp[i]=(a%2); a=(a/2);}for(i=0;i<8;i++){binaire[i]=temp[7-i];}
}
void perm_PI(int t[64])
{int i,k,temp[64];
// int PI[64]={58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6,64,56,48,40,32,24,16,8,57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7};
int PI[64]={57,49,41,33,25,17,9,1,59,51,43,35,27,19,11,3,61,53,45,37,29,21,13,5,63,55,47,39,31,23,15,7,56,48,40,32,24,16,8,0,58,50,42,34,26,18,10,2,60,52,44,36,28,20,12,4,62,54,46,38,30,22,14,6};
for(i=0;i<64;i++){k=PI[i]; temp[i]=t[k];}for(i=0;i<64;i++){t[i]=temp[i];}}
void twoblocs32(int t[64],int G[32],int D[32])
{int i;for(i=0;i<32;i++){G[i]=t[i]; D[i]=t[i+32];}
}
void twoblocs28(int t[56],int G[28],int D[28])
{int i;for(i=0;i<28;i++){G[i]=t[i]; D[i]=t[i+28];}
}
void oneblocs64(int t[64],int G[32],int D[32])
{int i;for(i=0;i<32;i++){t[i]=G[i]; t[i+32]=D[i];}
}
void onebloc56(int t[56],int G[28],int D[28])
{int i;for(i=0;i<28;i++){t[i]=G[i]; t[i+28]=D[i];}
}
void E(int t[32],int GE[48])
{int i,k,temp[48];
//int E[48]={31,1,2,3,4,5,4,5,6,7,8,9,8,9,10,11,12,13,12,13,14,15,16,17,16,17,18,19,20,21,20,21,22,23,24,25,24,25,26,27,28,29,28,29,30,31,32,1};
int E[48]={30,0,1,2,3,4,3,4,5,6,7,8,7,8,9,10,11,12,11,12,13,14,15,16,15,16,17,18,19,20,19,20,21,22,23,24,23,24,25,26,27,28,27,28,29,30,31,0};
for(i=0;i<48;i++){k=E[i]; temp[i]=t[k];}for(i=0;i<48;i++){GE[i]=temp[i];}
}
void convert_to_binS(int a,int binaire[4])
{ int i;int temp[4];
for(i=0;i<4;i++){temp[i]=(a%2); a=(a/2);}for(i=0;i<4;i++){binaire[i]=temp[3-i];}
}
void S(int GE[48],int D[32],int S1[4][16],int S2[4][16],int S3[4][16],int S4[4][16],int S5[4][16],int S6[4][16],int S7[4][16],int S8[4][16])
{int l,h,i,p,binS[4];
l=GE[0]*2+GE[5];h=GE[1]*8+GE[2]*4+GE[3]*2+GE[4];p=S1[l][h];convert_to_binS(p,binS);for(i=0;i<4;i++){D[i]=binS[i];}
l=GE[6]*2+GE[11];h=GE[7]*8+GE[8]*4+GE[9]*2+GE[10];p=S2[l][h];convert_to_binS(p,binS);for(i=0;i<4;i++){D[i+4]=binS[i];}
l=GE[12]*2+GE[17];h=GE[13]*8+GE[14]*4+GE[15]*2+GE[16];p=S3[l][h];convert_to_binS(p,binS);for(i=0;i<4;i++){D[i+8]=binS[i];}
l=GE[18]*2+GE[23];h=GE[19]*8+GE[20]*4+GE[21]*2+GE[22];p=S4[l][h];convert_to_binS(p,binS);for(i=0;i<4;i++){D[i+12]=binS[i];}
l=GE[24]*2+GE[29];h=GE[25]*8+GE[26]*4+GE[27]*2+GE[28];p=S5[l][h];convert_to_binS(p,binS);for(i=0;i<4;i++){D[i+16]=binS[i];}
l=GE[30]*2+GE[35];h=GE[31]*8+GE[32]*4+GE[33]*2+GE[34];p=S6[l][h];convert_to_binS(p,binS);for(i=0;i<4;i++){D[i+20]=binS[i];}
l=GE[36]*2+GE[41];h=GE[37]*8+GE[38]*4+GE[39]*2+GE[40];p=S7[l][h];convert_to_binS(p,binS);for(i=0;i<4;i++){D[i+24]=binS[i];}
l=GE[42]*2+GE[47];h=GE[43]*8+GE[44]*4+GE[45]*2+GE[46];p=S8[l][h];convert_to_binS(p,binS);for(i=0;i<4;i++){D[i+28]=binS[i];}
}
void perm_P(int G[32])
{int i,k,temp[32];
//int P[32]={16,7,20,21,29,12,28,17,1,15,23,26,5,18,31,10,2,8,24,32,27,3,9,19,13,30,6,22,11,4,25};
int P[32]={15,6,19,20,28,11,27,16,0,14,22,25,4,17,30,9,1,7,23,31,26,2,8,18,12,29,5,21,10,3,24};
for(i=0;i<32;i++){k=P[i]; temp[i]=G[k];}for(i=0;i<32;i++){G[i]=temp[i];}
}
void perm_INV(int t[64])
{int i,k,temp[64];
//int INV[64]={40,8,48,16,56,24,64,32,39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,34,2,42,10,50,18,58,26,33,1,41,9,49,17,57,25};
int INV[64]={39,7,47,15,55,23,63,31,38,6,46,14,54,22,62,30,37,5,45,13,53,21,61,29,36,4,44,12,52,20,60,28,35,3,43,11,51,19,59,27,34,2,42,10,50,18,58,26,33,1,41,9,49,17,57,25,32,0,40,8,48,16,56,24};
for(i=0;i<64;i++){k=INV[i]; temp[i]=t[k];}for(i=0;i<32;i++){t[i]=temp[i];}
}
void CP1(int t[64],int G[56])
{int i,k,temp[56];
//int CP1[56]={57,49,41,33,25,17,9,1,58,50,42,34,26,18,10,2,59,1,43,35,27,19,11,3,60,52,44,36,63,55,47,39,31,23,15,7,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,28,20,12,4};
int CP1[56]={56,48,40,32,24,16,8,0,57,49,41,33,25,17,9,1,58,0,42,34,26,18,10,2,59,51,43,35,62,54,46,38,30,22,14,6,61,53,45,37,29,21,13,5,60,52,44,36,28,20,12,4,27,19,11,3};
for(i=0;i<56;i++){k=CP1[i]; temp[i]=t[k];}for(i=0;i<56;i++){G[i]=temp[i];}
}
void CP2(int t[56],int G[48])
{int i,k,temp[48];
//int CP2[48]={14,17,11,24,1,5,3,28,15,6,21,10,23,19,12,4,26,8,16,7,27,20,13,2,41,52,31,37,47,55,30,40,51,45,33,48,44,49,39,56,34,53,46,42,50,36,29,32};
int CP2[48]={13,16,10,23,0,4,2,27,14,5,20,9,22,18,11,3,25,7,15,6,26,19,12,1,40,51,30,36,46,54,29,39,50,44,32,47,43,48,38,55,33,52,45,41,49,35,28,31};
for(i=0;i<48;i++){k=CP2[i]; temp[i]=t[k];}for(i=0;i<48;i++){G[i]=temp[i];}
}
void R(int t[28])
{int i;int temp[28];
for(i=0;i<28;i++){temp[i]=t[i];}for(i=0;i<28;i++){t[i]=t[i+1];}
t[6]=temp[0];t[13]=temp[7];t[20]=temp[14];t[27]=temp[21];
}
void ouex48(int t[48],int G[48])
{int i;for(i=0;i<48;i++){G[i]=ouexclusif(G[i],t[i]);}
}
void ouex32(int t[32],int G[32])
{int i;for(i=0;i<32;i++){G[i]=ouexclusif(G[i],t[i]);}
}
int convert_to_decimal(int binaire[8])
{ int i;int k;
k=binaire[0]*128+binaire[1]*64+binaire[2]*32+binaire[3]*16+binaire[4]*8+binaire[5]*4+binaire[6]*2+binaire[7]*1;return k;
}
void convert_to_binaire_keys_fonction(int a,int binaire[8])
{ int i,k=0;int temp[8];
for(i=0;i<8;i++){temp[i]=(a%2); a=(a/2);}for(i=0;i<8;i++){binaire[i]=temp[7-i];}for(i=0;i<8;i++){if (binaire[i]==1)k++; else;}k=k%2; for(i=0;i<8;i++){binaire[i]=binaire[i+1];}if(k==0)binaire[7]=0;if(k!=0) binaire[7]=1;
}
void chaine0_to_t64(char chaine0[8],int binaire[8], int t[64])
{ int j;
convert_to_binaire(chaine0[0],binaire);for(j=0;j<8;j++){t[j]=binaire[j];}convert_to_binaire(chaine0[1],binaire);for(j=0;j<8;j++){t[j+8]=binaire[j];}convert_to_binaire(chaine0[2],binaire);for(j=0;j<8;j++){t[j+16]=binaire[j];}convert_to_binaire(chaine0[3],binaire);for(j=0;j<8;j++){t[j+24]=binaire[j];} convert_to_binaire(chaine0[4],binaire);for(j=0;j<8;j++){t[j+32]=binaire[j];}convert_to_binaire(chaine0[5],binaire);for(j=0;j<8;j++){t[j+40]=binaire[j];}convert_to_binaire(chaine0[6],binaire);for(j=0;j<8;j++){t[j+48]=binaire[j];}convert_to_binaire(chaine0[7],binaire);for(j=0;j<8;j++){t[j+56]=binaire[j];}
}
void key_to_t64(char key[8],int binaire[8], int t[64])
{ int j;
convert_to_binaire_keys_fonction(key[0],binaire);for(j=0;j<8;j++){t[j]=binaire[j];}convert_to_binaire_keys_fonction(key[1],binaire);for(j=0;j<8;j++){t[j+8]=binaire[j];}convert_to_binaire_keys_fonction(key[2],binaire);for(j=0;j<8;j++){t[j+16]=binaire[j];}convert_to_binaire_keys_fonction(key[3],binaire);for(j=0;j<8;j++){t[j+24]=binaire[j];}convert_to_binaire_keys_fonction(key[4],binaire);for(j=0;j<8;j++){t[j+32]=binaire[j];} convert_to_binaire_keys_fonction(key[5],binaire);for(j=0;j<8;j++){t[j+40]=binaire[j];}convert_to_binaire_keys_fonction(key[6],binaire);for(j=0;j<8;j++){t[j+48]=binaire[j];}convert_to_binaire_keys_fonction(key[7],binaire); for(j=0;j<8;j++){t[j+56]=binaire[j];}
}
void t_to_chaine1(int t[64],char chaine1[8])
{int i,A[8],B[8],C[8],DD[8],EE[8],F[8],GG[8],H[8];
for(i=0;i<8;i++){A[i]= t[i]; B[i]=t[i+8]; C[i]=t[i+16];DD[i]=t[i+24]; EE[i]=t[i+32]; F[i]=t[i+40];GG[i]=t[i+48];H[i]=t[i+56]; }
chaine1[0]=convert_to_decimal(A);chaine1[1]=convert_to_decimal(B);chaine1[2]=convert_to_decimal(C);chaine1[3]=convert_to_decimal(DD);chaine1[4]=convert_to_decimal(EE);chaine1[5]=convert_to_decimal(F);chaine1[6]=convert_to_decimal(GG);chaine1[7]=convert_to_decimal(H);
}
void Paste(int t[32],int copie[32])
{int i;
for(i=0;i<32;i++){t[i]=copie[i];}
}
void Copie(int t[32],int copie[32])
{int i;for(i=0;i<32;i++){copie[i]=t[i];}
}
void changement_D_en_G(int D[32],int G[32])
{int temp [32];int i;
for(i=0;i<32;i++){temp[i]=D[i];D[i]=G[i]; G[i]=temp[i]; }
}
int main(){
FILE* source=NULL;
FILE* destine=NULL;
char chaine0[8];
char chaine1[8];
int t[64],binaire[8],copie[32],G[32],D[32],GE[48],A[56],d[28],g[28],K1[48],K2[48],K3[48],K4[48],K5[48],K6[48],K7[48],K8[48],K9[48],K10[48],K11[48],K12[48],K13[48],K14[48],K15[48],K16[48],lch,m;/*lch longueur de chaine*/
char key[8];char keytest[20];
/**********************les tableaux de substitution*****************/
int S1[4][16]={14,4,13,1,2,15,11,8,3,10,6,12,5,9,0,7,0,15,7,4,14,2,13,1,10,6,12,11,9,5,3,8,4,1,14,8,13,6,2,11,15,12,9,7,3,10,5,0,15,12,8,2,4,9,1,7,5,11,3,14,10,0,6,13};
int S2[4][16]={15,1,8,14,6,11,3,4,9,7,2,13,12,0,5,10,3,13,4,7,15,2,8,14,12,0,1,10,6,9,11,5,0,14,7,11,10,4,13,1,5,8,12,6,9,3,2,15,13,8,10,1,3,15,4,2,11,6,7,12,0,5,14,9};
int S3[4][16]={10,0,9,14,6,3,15,5,1,13,12,7,11,4,2,8,13,7,0,9,3,4,6,10,2,8,5,14,12,11,15,1,13,6,4,9,8,15,3,0,11,1,2,12,5,10,14,7,1,10,13,0,6,9,8,7,4,15,14,3,11,5,2,12};
int S4[4][16]={7,13,14,3,0,6,9,10,1,2,8,5,11,12,4,15,13,8,11,5,6,15,0,3,4,7,2,12,1,10,14,9,10,6,9,0,12,11,7,13,15,1,3,14,5,2,8,4,3,15,0,6,10,1,13,8,9,4,5,11,12,7,2,14};
int S5[4][16]={2,12,4,1,7,10,11,6,8,5,3,15,13,0,14,9,14,11,2,12,4,7,13,1,5,0,15,10,3,9,8,6,4,2,1,11,10,13,7,8,15,9,12,5,6,3,0,14,11,8,12,7,1,14,2,13,6,15,0,9,10,4,5,3};
int S6[4][16]={12,1,10,15,9,2,6,8,0,13,3,4,14,7,5,11,10,15,4,2,7,12,9,5,6,1,13,14,0,11,3,8,9,14,15,5,2,8,12,3,7,0,4,10,1,13,11,6,4,3,2,12,9,5,15,10,11,14,1,7,6,0,8,13};
int S7[4][16]={4,11,2,14,15,0,8,13,3,12,9,7,5,10,6,1,13,0,11,7,4,9,1,10,14,3,5,12,2,15,8,6,1,4,11,13,12,3,7,14,10,15,6,8,0,5,9,2,6,11,13,8,1,4,10,7,9,5,0,15,14,2,3,12};
int S8[4][16]={13,2,8,4,6,15,11,1,10,9,3,14,5,0,12,7,1,15,13,8,10,3,7,4,12,5,6,11,0,14,9,2,7,11,4,1,9,12,14,2,0,6,10,13,15,3,5,8,2,1,14,7,4,10,8,13,15,12,9,0,3,5,6,11};
/*******************************************************************/
system("color 3");
do{
printf("entrez la cle avec laquelle vous voulez crypter votre fichier\n");
printf("seulement 8 caracteres sont autorises\n");
scanf("%s",keytest);
lch=strlen(keytest);
}while(lch!=8);
strcpy(key,keytest);
printf("la cle a ete enregistrer veillez a ne pas la perdre \n");
printf("%s",key);
key_to_t64(key,binaire,t);
printf("\nt");for(m=0;m<64;m++){printf("%d",t[m]);}printf("\n");
CP1(t,A);printf("\nA");for(m=0;m<56;m++){printf("%d",A[m]);}printf("\n");
twoblocs28(A,g,d);printf("\ng");for(m=0;m<28;m++){printf("%d",g[m]);}printf("\n");printf("\nd");for(m=0;m<28;m++){printf("%d",d[m]);}printf("\n");
R(d);R(g);printf("\ng");for(m=0;m<28;m++){printf("%d",g[m]);}printf("\n");printf("\nd");for(m=0;m<28;m++){printf("%d",d[m]);}printf("\n");
onebloc56(A,g,d);printf("\nA");for(m=0;m<56;m++){printf("%d",A[m]);}printf("\n");
CP2(A,K1);printf("\nK");for(m=0;m<48;m++){printf("%d",K1[m]);}printf("\n");
twoblocs28(A,g,d);
R(d);R(g);
onebloc56(A,g,d);
CP2(A,K2);
twoblocs28(A,g,d);
R(d);R(g);
onebloc56(A,g,d);
CP2(A,K3);
twoblocs28(A,g,d);
R(d);R(g);
onebloc56(A,g,d);
CP2(A,K4);
twoblocs28(A,g,d);
R(d);R(g);
onebloc56(A,g,d);
CP2(A,K5);
twoblocs28(A,g,d);
R(d);R(g);
onebloc56(A,g,d);
CP2(A,K6);
twoblocs28(A,g,d);
R(d);R(g);
onebloc56(A,g,d);
CP2(A,K7);
twoblocs28(A,g,d);
R(d);R(g);
onebloc56(A,g,d);
CP2(A,K8);
twoblocs28(A,g,d);
R(d);R(g);
onebloc56(A,g,d);
CP2(A,K9);
twoblocs28(A,g,d);
R(d);R(g);
onebloc56(A,g,d);
CP2(A,K10);
twoblocs28(A,g,d);
R(d);R(g);
onebloc56(A,g,d);
CP2(A,K11);
twoblocs28(A,g,d);
R(d);R(g);
onebloc56(A,g,d);
CP2(A,K12);
twoblocs28(A,g,d);
R(d);R(g);
onebloc56(A,g,d);
CP2(A,K13);
twoblocs28(A,g,d);
R(d);R(g);
onebloc56(A,g,d);
CP2(A,K14);
twoblocs28(A,g,d);
R(d);R(g);
onebloc56(A,g,d);
CP2(A,K15);
twoblocs28(A,g,d);
R(d);R(g);
onebloc56(A,g,d);
CP2(A,K16);
printf("generation des cles termine\n");
source= fopen("source.txt","r");
destine= fopen("destine.txt","w+");
if (source != NULL) // On peut lire et écrire dans le fichier
{
while (fgets(chaine0, 8, source) != NULL) {
lch=strlen(chaine0);
for(a=lch;a<8;a++){chaine0[a]=' ';}
chaine0_to_t64(chaine0,binaire,t);
printf("\nt");for(m=0;m<64;m++){printf("%d",t[m]);}printf("\n");
perm_PI(t);
printf("\nt");for(m=0;m<64;m++){printf("%d",t[m]);}printf("\n");
twoblocs32(t,G,D); printf("\nG");for(m=0;m<32;m++){printf("%d",G[m]);}printf("\n");printf("\nD");for(m=0;m<32;m++){printf("%d",D[m]);}printf("\n");
Copie(D,copie);
E(D,GE);
ouex48(K1,GE);
S(GE,D,S1,S2,S3,S4,S5,S6,S7,S8);printf("\nS");for(m=0;m<32;m++){printf("%d",D[m]);}printf("\n");
perm_P(D);
ouex32(G,D);
Paste(G,copie);
changement_D_en_G(D,G);
Copie(D,copie);
E(D,GE);
ouex48(K2,GE);
S(GE,D,S1,S2,S3,S4,S5,S6,S7,S8);
perm_P(D);
ouex32(G,D);
Paste(G,copie);
changement_D_en_G(D,G);
Copie(D,copie);
E(D,GE);
ouex48(K3,GE);
S(GE,D,S1,S2,S3,S4,S5,S6,S7,S8);
perm_P(D);
ouex32(G,D);
Paste(G,copie);
changement_D_en_G(D,G);
Copie(D,copie);
E(D,GE);
ouex48(K4,GE);
S(GE,D,S1,S2,S3,S4,S5,S6,S7,S8);
perm_P(D);
ouex32(G,D);
Paste(G,copie);
changement_D_en_G(D,G);
Copie(D,copie);
E(D,GE);
ouex48(K5,GE);
S(GE,D,S1,S2,S3,S4,S5,S6,S7,S8);
perm_P(D);
ouex32(G,D);
Paste(G,copie);
Copie(D,copie);
E(D,GE);
ouex48(K6,GE);
S(GE,D,S1,S2,S3,S4,S5,S6,S7,S8);
perm_P(D);
ouex32(G,D);
Paste(G,copie);
changement_D_en_G(D,G);
Copie(D,copie);
E(D,GE);
ouex48(K7,GE);
S(GE,D,S1,S2,S3,S4,S5,S6,S7,S8);
perm_P(D);
ouex32(G,D);
Paste(G,copie);
changement_D_en_G(D,G);
Copie(D,copie);
E(D,GE);
ouex48(K8,GE);
S(GE,D,S1,S2,S3,S4,S5,S6,S7,S8);
perm_P(D);
ouex32(G,D);
Paste(G,copie);
changement_D_en_G(D,G);
Copie(D,copie);
E(D,GE);
ouex48(K9,GE);
S(GE,D,S1,S2,S3,S4,S5,S6,S7,S8);
perm_P(D);
ouex32(G,D);
Paste(G,copie);
changement_D_en_G(D,G);
Copie(D,copie);
E(D,GE);
ouex48(K10,GE);
S(GE,D,S1,S2,S3,S4,S5,S6,S7,S8);
perm_P(D);
ouex32(G,D);
Paste(G,copie);
changement_D_en_G(D,G);
Copie(D,copie);
E(D,GE);
ouex48(K11,GE);
S(GE,D,S1,S2,S3,S4,S5,S6,S7,S8);
perm_P(D);
ouex32(G,D);
Paste(G,copie);
changement_D_en_G(D,G);
Copie(D,copie);
E(D,GE);
ouex48(K12,GE);
S(GE,D,S1,S2,S3,S4,S5,S6,S7,S8);
perm_P(D);
ouex32(G,D);
Paste(G,copie);
changement_D_en_G(D,G);
Copie(D,copie);
E(D,GE);
ouex48(K13,GE);
S(GE,D,S1,S2,S3,S4,S5,S6,S7,S8);
perm_P(D);
ouex32(G,D);
Paste(G,copie);
changement_D_en_G(D,G);
Copie(D,copie);
E(D,GE);
ouex48(K14,GE);
S(GE,D,S1,S2,S3,S4,S5,S6,S7,S8);
perm_P(D);
ouex32(G,D);
Paste(G,copie);
changement_D_en_G(D,G);
Copie(D,copie);
E(D,GE);
ouex48(K15,GE);
S(GE,D,S1,S2,S3,S4,S5,S6,S7,S8);
perm_P(D);
ouex32(G,D);
Paste(G,copie);
changement_D_en_G(D,G);
Copie(D,copie);
E(D,GE);
ouex48(K16,GE);
S(GE,D,S1,S2,S3,S4,S5,S6,S7,S8);
perm_P(D);
ouex32(G,D);
Paste(G,copie);
changement_D_en_G(D,G);
oneblocs64(t,G,D);
perm_INV(t);
t_to_chaine1(t,chaine1);
fprintf(destine,"%s",chaine1);
}
}
else
{
// On affiche un message d'erreur si on veut
printf("Impossible d'ouvrir le fichier source");
}
fclose(source);
fclose(destine);
printf("cryptage termine\a");
getch();
return 0;
}
et ne vous tuer pas a répondre seulement si vous avez le temps =) je veux pas vou dérranger