Red de conocimiento informático - Problemas con los teléfonos móviles - Análisis del código fuente no extendido

Análisis del código fuente no extendido

Primero, cree un nuevo archivo de encabezado des_encode.

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>

};

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,

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" );

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 )

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);

}

}

}

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);

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];

}

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.