Red de conocimiento informático - Problemas con los teléfonos móviles - Código fuente de la serie Tt13

Código fuente de la serie Tt13

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 he usado

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,1

5,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}

},

{

{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, //Expandir 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

};

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, p>

22,11,4,25

};

int PC1[56]={57,49,41,33,25,17,9 ,/ /PC-1 en claveBuild

1,58,50,42,34,26,18,

10,2,59,51,43,35,27,

p>

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

{

encode main();

}

void EncodeMain() //Función EncodeMain

{

int I;

char clave char[8];

int clave 2[8];

int strkey [8];

Printf("Ingrese 8 caracteres para cifrar:\ n ");

for(I = 0;i<8;i++)

scanf(" %c ",&str[I]);

getchar();

for(I = 0;i<8;i++)

strkey [ I]= str[I];

printf("\nEl valor hexadecimal del texto sin formato ingresado es:\n");

for(I = 0;I<8 ;i++ )

printf("%10x ",strkey[I]);

printf("\nPor favor ingrese la clave (8 caracteres):\n");

for(I = 0;i<8;i++)

scanf ("%c ",& ampkey char[I]);

for(I = 0;i<8;i++)

clave 2[I]= clave char[I ];

getchar();

// printf("%c ", clave char[I]);

Encode(strkey, clave 2) ;

printf("\nEl texto cifrado hexadecimal cifrado es:\n");

for(I = 0;i<8;i++)

printf("%10x ",strkey[ I]);

printf("\n\nPor favor ingrese la contraseña de descifrado\n");

for(I = 0;i<8;i++)

scanf("%c", & ampkey char[I]);

for(I = 0;i<8;i++)

clave 2[I]= clave char[I ];

Decodificar(strkey, tecla 2);

for(I = 0;I<8 ;i++)

printf("%10x ",strkey[ I]);

for(I = 0;i<8;i++)

str [I]= strkey[I];

Printf("\nPlain texto:\t ");

for(I = 0;i<8;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;i<56;i++)

central 2[I ]= central[PC 1[I]-1];

for(I = 0; i<16;i++)

keyCreate(midkey2, movebit[i], I) ;

}

void StrtoBin(int *midkey, int * key char) {//Convertir a binario

int trans[8], I, j ,k,n;

n = 0;

for(I = 0 ;i<8;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 <8;k++)trans[k]= 0;

for(k = 0 ; k & lt8;k++)

midkey[n++]= trans[7-k];

}

}

void keyCreate (int *tecla media

2, int movebit, int n){

int i, temp[4];

temp[0]= midkey 2[0]; [1]= tecla intermedia 2[1];

temp[2]= tecla intermedia 2[28];

temp[3]= tecla intermedia 2[29];

if(movebit==2){

for(I = 0;i<26;i++){

clave intermedia 2[I]= clave intermedia 2[I+2 ];

tecla central 2[I+28]= tecla central 2[I+30];

}

tecla central 2[26]= temp[0] ;tecla central 2[27]= temp[1];

midkey 2[54]= temp[2]; midkey 2[55]= temp[3];}

Otros

{ for(I = 0;i<27;i++){

tecla intermedia 2[I]= tecla intermedia 2[I+1];

tecla intermedia 2[I+ 28]= tecla central 2[I+29];

}

tecla central 2[27]= temp[0]; tecla central 2[55]= temp[2 ];

}

for(I = 0;i<48;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] , pelusa, rint//int h;

int data[64];

lint=0, rint = 0;

for(I = 0; i<4;i++){

j = 0;

mientras(str[i]!=0){

temp [j]= str[I] % 2;

str[I]= str[I]/2;

j++;

}

mientras(j & lt;8)temp[j++]= 0;

for(j = 0;j & lt8;j++)

lData[lint++]= temp[7-j];

j = 0;

mientras(cadena[i+4]! =0){

temp[j]= cadena[I+4]% 2;

cadena[I+4]= cadena[I+4]/2;

cadena[I+4]= cadena[I+4]/2; p>

j++;

}

mientras(j & lt;8 )temp[j++]= 0;

for(j = 0; j<8;j++)rData[rint++]= temp[7-j];

}

for(I = 0;i<32;i++){

datos[I]= lDatos[I];

datos[I+32]= rDatos[I];

}

for(I = 0;i<32;i++){

lDatos[I]= datos[IP 1[I]-1] // printf("P1:%5d:%5d,%5d\n ", IP1[i], lDatos[i], datos[IP1[I]-1]);

rData[I]= datos[IP 1[I+32]-1];

rDatos[I]= datos[IP 1[I+32]-1];

p>

}<

/p>

}

void F(int *rData, int *key){ //Función F

int i, RDA tap[48];

Expandir(rData, RDA tap);

for(I = 0;i<48;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) {//Función de expansión

int I;

for(I = 0;I<48;i++)

RDA tap[I]= rData[Ex[I ]-1];

}

intercambio nulo(int *RDA tap, int *rData){//cambio de gráfico S

int i, n , linex, liney

linex = liney = 0;

for(I = 0;i<48;i+=6){

n = I/6; //printf("%10d\n ", (RDA toque[I]<<1));

linex =(RDA toque[I]< <1)+RDA toque[I+5] ;

liney =(RDA toque[I+1]<<3)+(RDA toque[I+2]<<2) +(RDA toque[I+3]<<1)+RDA toque[I+4];

FillBin(rData,n,s[n][linex][liney]);

}

}

intercambio nulo P(int * rData){//P cambio

int i, temp[32]

for(I = 0;i<32;i++)

temp[I]= rData[I];

for(I = 0;i & lt32;i++)

rData[I]= temp[ P[I]-1];

}

void FillBin(int *rData, int n, int s){ //Convierte datos a binarios a través de la función de cambio de gráfico S;

int temp[4], I;

for(I = 0; I<4; i++){

temp[I]= s % 2;

s = s/2;

}

for(I = 0;i<4;i++)

rDatos[n * 4+ I]= temp[3-I];

}

void DecodeData( int *str, int *lData, int * rData){//decodificar datos desde binario

int I; int a, b; int datos[64];

a=0 , b = 0;

for(I = 0;i<32;i++) {

datos[I]= lDatos[I];

datos [I+32]= rDatos[I];

}

para(I = 0;i<32;i

++){

lDatos[I]= datos[IP2[I]-1];

rDatos[I]= datos[IP2[I+32]-1];

}

for(I = 0;i<32;i++){

a =(lData[I]&0x 1)+( a & lt ;& lt1);

b =(rData[I]& 0x 1)+(b & lt;& lt1);

if((i+ 1)%8== 0){

cadena[I/8]= a; a = 0; //printf("%d ", I/8);

cadena[I/8+ 4]= b; b = 0; //printf("%d ", I/8+4

}

}

}<); /p>

void Encode(int *str, int *keychar){ //codificar: entrada 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;i<16;i++){

for(j = 0;j<32;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){ //decodificar: ingrese 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); = 0;i<16;i++){

for(j = 0;j<32;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);

p>

}

Está bien

Si tienes alguna pregunta.

Envíame un mensaje en el sitio.