// Lê a matriz através de um arquivo .txt void leMatriz(int n, Bloco matriz[20][20]) { FILE *fp; int i, j; char arq[20]; // Cria as variável lermos o arquivo txt string fase("fase"), num2, txt(".txt"); // Criamos o tipo ostringstream, para nos ajudar a converter int para string ostringstream tmp; tmp << n; num2 = tmp.str(); // Concatenamos as 3 variáveis, e usamos ela completa para abrir o nome do arquivo que desejamos fase += num2 + txt; fp = fopen(fase.c_str(), "r"); // Depois de aberto o arquivo, usamos ele para passar os dados necessários para nossa matriz de Blocos for (i = 0; i < 20;i++) { for (j = 0; j < 20; j++) { fscanf(fp, "%i ", &matriz[j][i].tipo); matriz[j][i].y = i * 32; matriz[j][i].x = j * 32; } fscanf(fp, "\n"); } fclose(fp); }
void decrypt_seca( unsigned char *k,unsigned char *d ) { /* k = clave de 128 bits (16 bytes),*/ /* d = datos de 64 bits (8 bytes)*/ unsigned char i,j,l,C,dt,D[4]; /* preparacion de la clave*/ C=0xff; for(j=0;j<4;++j) { for(i=0;i<16;++i) { if((i&3)==0) ++C; k[i]^=T1[k[(15+i)&0xf]^k[(i+1)&0xf]^C]; } } /* manipulacion de los datos*/ j=0; /* 16 rondas */ for(i=0;i<16;++i) { for(l=0;l<4;++l) D[l]=d[l+4]; /* Copia d5..d8 a D1..D4 */ j=(j+12)&0xf; /* selecciona clave apropiada*/ fase(&k[j],D); /* modifica D con clave pertinente */ /* paso 3 */ for(l=0;l<4;++l) { /* modifica d bajo*/ d[l]^=T2[D[TD[l]]]; /* paso 4*/ } for(l=3;l!=0xff;--l) { /* modifica k usado*/ k[j+l]^=T1[k[(j+l+1)&0xf]^k[(j+l+15)&0xf]^(15-i)]; } if(i<15) { /* intercambia d altos y bajos */ for(l=0;l<4;++l) { dt=d[l];d[l]=d[4+l];d[4+l]=dt; } } } }
void encrypt_seca( unsigned char *k,unsigned char *d ) { /* Rutina de encriptacion, no modifica la clave */ /* k=clave de 128 bits (16 bytes), d=datos de 64 bits (8 bytes) */ unsigned char i,j,l,dt,D[4],kk[16]; /* primero hace copia de la clave*/ for(i=0;i<16;++i) kk[i]=k[i]; /* 16 rondas*/ for(j=i=0;i<16;++i,j=(j+4)&0xf) { /* paso 1 */ for(l=0;l<4;++l) { kk[j+l]^=T1[kk[(j+l+1)&0xf]^kk[(j+l+15)&0xf]^i]; } if(i>0) { /* intercambia d altos y bajos */ for(l=0;l<4;++l) { dt=d[l];d[l]=d[4+l];d[4+l]=dt; } } for( l=0; l<4; ++l ) D[l]=d[l+4]; /* Copia d5..d8 a D1..D4 */ fase( &kk[j],D ); /* modifica D con clave pertinente */ /* paso 2 */ for(l=0;l<4;++l) { /* modifica d bajo*/ d[l]^=T2[D[TD[l]]]; } } }