Análisis del código fuente no extendido
H
El contenido es el siguiente:
void encode main(); //Función EncodeMain
void DecodeMain(); //Lo siento, no lo he hecho. Todavía no lo usé
p>void Decode(int *str, int * key char); //decode: ingresa 8 caracteres, 8 códigos clave
void Encode(int *str) , int * key char) ; //codificar: ingrese 8 caracteres, 8 códigos de clave
void key build(int * key char); //Crear matriz de claves
void StrtoBin( int *midkey, int * key char); //Conviértete en binario
void keyCreate(int *midkey2, int movebit, int I); //Llama a través de keyBuild
void EncodeData( int *lData, int *rData, int * SRT); //función de datos codificados
void F(int *rData, int * key); //función F
void Expandir; (int * rData, int * RDA tap); //Funciones extendidas
void exchange(int * RDA tap, int * rData //Cambios en el diagrama S
void exchange p); (int * rData); //P cambio
void FillBin(int *rData, int n, int s); //Los datos se convierten a binarios llamados a través de la función de cambio del diagrama S
;void DecodeData (int *str, int *lData, int *rData); //Decodificar datos del archivo binario
int IP1[]={58, 50, 42, 34, 26, 18 , 10, 2 , 60, 52, 44, 36, 28, 20, 12, 4, //Cambios iniciales
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 IP2[]={40, 8, 48, 16, 56, 24, 64, 32, 39, 7, 47, 15, 55, 23, 63, 31, //opp inicial cambiar
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 S[][4][16]= {///S- matriz de gráficos
}; p>
{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}
},
{
{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}
},
{
{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}
},
{
{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}
},
{
{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}
},
{
{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}
},
{
{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}
},
p>
{
{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}
}
};
int Ex[48]={ 32, 1, 2, 3, 4, 5, // Ampliar matriz
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 p> p>
};
int P[32]={16, 7, 20, 21, //P-cambio
29, 12, 28, 17 ,
1, 15, 23, 26,
5, 18, 31, 10,
2, 8, 24, 14,
32, 27, 3, 9,
19, 13, 30, 6,
22, 11, 4, 25
};
int PC1[56]={57, 49, 41, 33, 25, 17, 9, //PC-1 en keyBuild
1, 58, 50, 42, 34 , 26 , 18,
10, 2, 59, 51, 43, 35, 27,
19, 11, 3, 60, 52, 44, 36,
63, 55, 47, 39, 31, 33, 15,
7, 62, 54, 46, 38, 30, 22,
14, 6, 61, 53, 45, 37, 29,
21, 13, 5, 28, 20, 12, 4
};
int PC2[48 ]= {14, 17, 11, 24, 1, 5, //PC-2 en keyBuild
3, 28, 15, 6, 21, 10,
23, 19, 12, 4, 26, 8,
16, 7, 27, 20, 13, 2,
41, 52, 31, 37, 47, 55, p>
30, 40, 51, 45, 33, 48,
44, 49, 39, 56, 34, 53,
46, 42, 50, 36 , 29 , 32
};
Luego crea des.cpp
El contenido es el siguiente:
# include ltstdio.h gt
# include ltstring.h gt
#Include " des_encode.h "
int key[16][48];
cadena de caracteres[8 ];
void main()//función principal
{
codificar main();
}
void EncodeMain() //Función EncodeMain
{
int I;
char key char[8];
int
clave 2[8];
int strkey[8];
Printf("Ingrese 8 caracteres para cifrar:\n ");
para (I = 0;ilt8;i)
scanf("c ", ampstr[I]);
getchar();
for( I = 0;ilt8;i)
strkey[I]= str[I];
printf("\nEl valor hexadecimal del texto sin formato ingresado es:\n" ); p>
for(I = 0;ilt8;i)
printf("10x ", strkey[I]);
printf(" \ nIngrese la clave ( 8 caracteres):\n ");
for(I = 0;ilt8;i)
scanf("c ", ampkey char[ I]);
for(I = 0;ilt8;i)
clave 2[I]= clave char[I];
getchar( );
// printf("c ", key char[I]);
Encode(strkey, key 2);
printf(" \ El texto cifrado hexadecimal cifrado por n es:\ n ");
for(I = 0;ilt8;i)
printf("10x ", strkey[I ]);
printf(" \ n \ nIngrese la contraseña de descifrado\ n ");
for(I = 0;ilt8;i)
scanf("c ", ampkey char[I]);
for(I = 0;ilt8;i)
clave 2[I]= clave char[I] ;
Decodificar(strkey, clave 2) ;
for(I = 0;ilt8;i)
printf("10x ", strkey[I ]);
for(I = 0; ilt8;i)
str[I]= strkey[I];
Printf("\n Texto sin formato: \t ");
for( I = 0;ilt8;i)
printf("c",str[I]);
printf(" \ n \ n ");
>}
void key build(int * key char){//Crear matriz de claves
int i, j
int movebit[]={1; , 1, 2, 2, 2, 2, 2,
1, 2, 2, 2, 2, 2, 2, 1};
int midkey 2[56] ;
int midkey[64];
StrtoBin(midkey, key char);
for(I = 0;ilt56;i)
midkey 2[I]= midkey[PC 1[I]-1];
for(I = 0; i lt16; i )
keyCreate(midkey2, movebit [i], i);
}
void StrtoBin(int *midke
y, int * key char) { // Convertir a binario
int trans[8], I, j, k, n
n = 0; p>for(I = 0;ilt8;i){
j = 0;
mientras(keychar[i]!=0){
trans [j]= clave char[I] 2;
key char[I]= clave char[I]/2;
j;
}
for(k = j;k lt8;k)trans[k]= 0;
for(k = 0;k lt8;k)
tecla media [n]= trans[7-k];
}
}
void keyCreate(int *midkey2, int movebit, int n){< / p>
int i, temp[4];
temp[0]= tecla intermedia 2[0];
temp[1]= tecla intermedia 2[1]; /p>
temp[2]= tecla intermedia 2[28];
temp[3]= tecla intermedia 2[29]
if(movebit==2) {
for(I = 0;ilt26;i){
tecla central 2[I]= tecla central 2[I 2];
tecla central 2[ I 28 ]= tecla intermedia 2[I 30];
}
tecla intermedia 2[26]= temp[0]; tecla intermedia 2[27]= temp[1];
p>
tecla central 2[54]= temp[2]; tecla central 2[55]= temp[3];}
Otro
{ for(I = 0; ilt27;i){
tecla central 2[I]= tecla central 2[I 1];
tecla central 2[I 28]= tecla central 2[I 29];
}
tecla central 2[27]= temp[0]; tecla central 2[55]= temp[2]; >para (I = 0;ilt48;i)
clave[n][I]= tecla intermedia 2[PC2[I]-1];
}
void EncodeData(int *lData, int *rData, int *str){ //función codificar datos
int i, j, temp[8], lint, rint//int h;
int datos[64];
lint=0, rint = 0;
for(I = 0;ilt4;i){
j = 0;
mientras(cadena[i]! =0){
temp[j]= cadena[I] 2;
cadena[I]= cadena[I]/2;
j;
}
mientras(j lt; 8)temp[j] = 0
for(j = 0; j lt8; j )
lDatos[lint]= temp[7-j];
j =
0;
mientras(cadena[i 4]!=0){
temp[j]= cadena[I 4] 2;
cadena[I 4]= str[I 4]/2;
j;
}
mientras(j lt; 8)temp[j]= 0;
for(j = 0;j lt8;j )rData[rint]= temp[7-j];
}
for(I = 0; ilt32;i){
datos[I]= lDatos[I];
datos[I 32]= rDatos[I];
}< / p>
for(I = 0;ilt32;i){
lDatos[I]= datos[IP 1[I]-1]; //printf("P1: 5d: 5d, 5d\n ", IP1[i], lDatos[i], datos[IP1[I]-1]);
rDatos[I]= datos[IP 1[I 32]-1 ];
}
}
void F(int *rData, int *key){ //F función
int i, RDA toque[48];
Expandir (rData, toque RDA);
for(I = 0;ilt48;i){
rdatap[ i]= rdatap[i]^key[i]; // printf("10d ",RDA tap[I]); if((I 1) 6 == 0)printf(" \ n "); >}
Exchange(rDataP, rData);
exchange p(rData);
}
void Expand (int *rData , int *RDA tap){//Expandir función
int I;
for(I = 0;ilt48;i)
RDA tap[I] = rData[Ex[I]-1];
}
void exchange(int *RDA tap, int *rData){//cambio de gráfico S
int i, n, linex, liney
linex = liney = 0;
for(I = 0; i lt48; i = 6) {
n = I/6; //printf("10d\n ", (RDA grifo[I] lt; lt1));
linex = (RDA grifo[I] lt ; lt1) RDA grifo [I 5];
liney =(RDA grifo[I 1] lt; lt3) (RDA grifo[I 2] lt; lt2) (RDA grifo[I 3] lt; lt1) RDA grifo[ I 4];
FillBin(rData, n, s[n][linex][liney]);
}
}
intercambio vacío P(int * rData){//P cambio
int i, temp[32];
for(I = 0; i lt32 ;i ) p>
temp[I]= rDatos[I];
f
o(I = 0;ilt32;i)
rData[I]= temp[P[I]-1];
}
void FillBin ( int *rData, int n, int s){ //Convierte datos a binarios; llama a través de la función de cambio de diagrama S
int temp[4], I;
for(I = 0;ilt4;i){
temp[I]= s 2;
s = s/2;
}
for(I = 0;ilt4;i)
rData[n * 4 I]= temp[3-I];
}
void DecodeData( int *str, int *lData, int * rData){//decodificar datos del binario
int I; int a, b; int data[64];
a =0 , b = 0;
for(I = 0;ilt32;i){
datos[I]= lDatos[I];
datos[I 32]= rDatos[I];
}
for(I = 0;ilt32;i){
lDatos[I]= datos[IP2[ I]-1];
rData[I]= datos[IP2[I 32]-1];
}
for( i = 0; ilt32;i){
a =(lData[I]&0x1) (alt;lt1);
b =(rData[I] amp; 0x 1) (b lt; lt1);
si ((i 1)8==0){
str[I/8]= a = 0 ;//printf("d ", I/8);
str[I/8 4]= b;b = 0; //printf("d ",I/8 4);
} p>
}
}
void Encode(int *str, int *keychar){ //codificar: ingresa 8 caracteres, 8 keychar
int lData[32], rData[32], temp[32], RDA tap[48];
int i, j;
key build(key char); p>
EncodeData(lData, rData, str);
for(I = 0;ilt16;i){
for(j = 0; j lt32; j )
temp[j]= rData[j];
F(rData, clave[I]);
for(j = 0; j lt32; j ){
rdata[j]=rdata[j]^ldata[j];
}
for(j = 0; j lt32; j )
lData[j]= temp[j];
}
DecodeData(str, rData , lData);
}
void Decode(int *str, int *keychar){ //decode: ingresa 8 caracteres,
8 caracteres de clave
int lData[32], rData[32], temp[32], RDA tap[48]; key build(key char);
EncodeData(lData, rData, str);//esta posición
for(I = 0;ilt16;i){
for(j = 0; j lt32; j )
temp[j]= rData[j];
F(rData, clave[15-I]) ;
for(j = 0; j lt32; j ){
rdata[j]=rdata[j]^ldata[j];
} p>
for(j = 0; j lt32; j ){
lData[j]= temp[j];
}
}
DecodeData(str, rData, lData);
}
OK
Si hay alguna pregunta.
Envíame un mensaje en el sitio.