Código fuente de la serie Tt13
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> 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 p>
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++) p>
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 p>
{ 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 ]; p>
}
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; p>
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]);
}
} p>
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);
} p>
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]; p>
}
}
DecodeData(str, rData, lData);
p>}
Está bien p>
Si tienes alguna pregunta.
Envíame un mensaje en el sitio.