moje.c

来自「This is a program with my school PWSZ c」· C语言 代码 · 共 611 行 · 第 1/2 页

C
611
字号
int liczba, kolumna, wiersz;
int S_6[4][16]={ {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} };

wiersz=2*B6[0]+B6[5];
kolumna=8*B6[1]+4*B6[2]+2*B6[3]+B6[4];

liczba=S_6[wiersz][kolumna];

binarny_krotki(liczba, y6);

return 0;
}

int S7(int *B7, int *y7)
{
int liczba, kolumna, wiersz;
int S_7[4][16]={ {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} };

wiersz=2*B7[0]+B7[5];
kolumna=8*B7[1]+4*B7[2]+2*B7[3]+B7[4];

liczba=S_7[wiersz][kolumna];

binarny_krotki(liczba, y7);

return 0;
}


int S8(int *B8, int *y8)
{
int liczba, kolumna, wiersz;
int S_8[4][16]={ {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} };

wiersz=2*B8[0]+B8[5];
kolumna=8*B8[1]+4*B8[2]+2*B8[3]+B8[4];

liczba=S_8[wiersz][kolumna];

binarny_krotki(liczba, y8);

return 0;
}

int laczenie_y(int *y1, int *y2, int *y3, int *y4, int *y5, int *y6, int *y7, int *y8, int *blok_P)
{
int i,j;

	for(i=0; i<4; i++)
	blok_P[i]=y1[i];
j=4;

	for(i=0; i<4; i++)
	{
	blok_P[j]=y2[i];
	j++;
	}

j=8;

	for(i=0; i<4; i++)
	{
	blok_P[j]=y3[i];
	j++;
	}

j=12;

	for(i=0; i<4; i++)
	{
	blok_P[j]=y4[i];
	j++;
	}

j=16;

	for(i=0; i<4; i++)
	{
	blok_P[j]=y5[i];
	j++;
	}

j=20;

	for(i=0; i<4; i++)
	{
	blok_P[j]=y6[i];
	j++;
	}

j=24;

	for(i=0; i<4; i++)
	{
	blok_P[j]=y7[i];
	j++;
	}

j=28;

	for(i=0; i<4; i++)
	{
	blok_P[j]=y8[i];
	j++;
	}


return 0;
}

int permutacja_P_bloku(int *blok_P)
{
int pom[32], i;

	for(i=0; i<32; i++)
	  pom[i]=blok_P[i];

blok_P[0]=pom[15];  blok_P[1]=pom[6];   blok_P[2]=pom[19];  blok_P[3]=pom[20];  blok_P[4]=pom[28];  blok_P[5]=pom[11];  blok_P[6]=pom[27];  blok_P[7]=pom[16];
blok_P[8]=pom[0];   blok_P[9]=pom[14];  blok_P[10]=pom[22]; blok_P[11]=pom[25]; blok_P[12]=pom[4];  blok_P[13]=pom[17]; blok_P[14]=pom[30]; blok_P[15]=pom[9];
blok_P[16]=pom[1];  blok_P[17]=pom[7];  blok_P[18]=pom[23]; blok_P[19]=pom[13]; blok_P[20]=pom[31]; blok_P[21]=pom[26]; blok_P[22]=pom[2];  blok_P[23]=pom[8];
blok_P[24]=pom[18]; blok_P[25]=pom[12]; blok_P[26]=pom[29]; blok_P[27]=pom[5];  blok_P[28]=pom[21]; blok_P[29]=pom[10]; blok_P[30]=pom[3];  blok_P[31]=pom[24];

return 0;
}

int xor_koncowe(int *tab_Ri, int *tab2_t, int *blok_P)
{
int i;

	for(i=0;i<32;i++)
	tab_Ri[i]=tab2_t[i]^blok_P[i];

return 0;
}


int xor(int *tab4_t, int *tab4_k, int *tab_xor)
{
int i;

	for(i=0;i<48;i++)
	tab_xor[i]=tab4_k[i]^tab4_t[i];

return 0;
}


int szyfrowanie(int *tab4_k, int *tab2_k, int *tab3_k, int *tab3_t, int *tab4_t, int *tab_xor, int *B1, int *B2, int *B3, int *B4, int *B5, int *B6, int *B7, int *B8, int *y1, int *y2, int *y3, int *y4, int *y5, int *y6, int *y7, int *y8, int *blok_P, int *tab_Ri, int *tab2_t)
{
int i,j;

	for(i=1;i<17;i++)
	{
	przesuw_klucza(tab2_k,i);
	przesuw_klucza(tab3_k,i);

	permutacja_klucza(tab2_k, tab3_k, tab4_k);

	rozszerzanie_Ro(tab3_t, tab4_t);

	xor(tab4_t, tab4_k, tab_xor);

	zamiana_na_bloki(tab_xor, B1, B2, B3, B4, B5, B6, B7, B8);

	S1(B1, y1);
	S2(B2, y2);
	S3(B3, y3);
	S4(B4, y4);
	S5(B5, y5);
	S6(B6, y6);
	S7(B7, y7);
	S8(B8, y8);

	laczenie_y(y1, y2, y3, y4, y5, y6, y7, y8, blok_P);

	permutacja_P_bloku(blok_P);

	xor_koncowe(tab_Ri, tab2_t, blok_P);


	for(j=0;j<32;j++)
	tab2_t[j]=tab3_t[j];   //Li

	for(j=0;j<32;j++)
	tab3_t[j]=tab_Ri[j];   //Ri

	}

return 0;
}


int deszyfrowanie(int *tab4_k, int *tab2_k, int *tab3_k, int *tab3_t, int *tab4_t, int *tab_xor, int *B1, int *B2, int *B3, int *B4, int *B5, int *B6, int *B7, int *B8, int *y1, int *y2, int *y3, int *y4, int *y5, int *y6, int *y7, int *y8, int *blok_P, int *tab_Ri, int *tab2_t)
{
int i,j,k;

       for(k=1;k<17;k++)
	   {
		przesuw_klucza(tab2_k,k);
		przesuw_klucza(tab3_k,k);
	   }


	for(i=16;i>0;i--)
	{
	 if(i!=16)
	 {
		przesuw_klucza_p(tab2_k,i+1);
		przesuw_klucza_p(tab3_k,i+1);
	 }

	     permutacja_klucza(tab2_k, tab3_k, tab4_k);


	rozszerzanie_Ro(tab3_t, tab4_t);

	xor(tab4_t, tab4_k, tab_xor);

	zamiana_na_bloki(tab_xor, B1, B2, B3, B4, B5, B6, B7, B8);

	S1(B1, y1);
	S2(B2, y2);
	S3(B3, y3);
	S4(B4, y4);
	S5(B5, y5);
	S6(B6, y6);
	S7(B7, y7);
	S8(B8, y8);

	laczenie_y(y1, y2, y3, y4, y5, y6, y7, y8, blok_P);

	permutacja_P_bloku(blok_P);

	xor_koncowe(tab_Ri, tab2_t, blok_P);

	for(j=0;j<32;j++)
	tab2_t[j]=tab3_t[j];   //Li

	for(j=0;j<32;j++)
	tab3_t[j]=tab_Ri[j];   //Ri

	}

return 0;
}



int permutacja_pocz_tekstu(int *tab1_t)
{
int tab_pom[64], i;

	for(i=0;i<64;i++)
	tab_pom[i]=tab1_t[i];//skopiowanie zawartosci tablicy tab1_t do tab_pom

tab1_t[0]=tab_pom[57];  tab1_t[1]=tab_pom[49];  tab1_t[2]=tab_pom[41];  tab1_t[3]=tab_pom[33];  tab1_t[4]=tab_pom[25];  tab1_t[5]=tab_pom[17];  tab1_t[6]=tab_pom[9];   tab1_t[7]=tab_pom[1];
tab1_t[8]=tab_pom[59];  tab1_t[9]=tab_pom[51];  tab1_t[10]=tab_pom[43]; tab1_t[11]=tab_pom[35]; tab1_t[12]=tab_pom[27]; tab1_t[13]=tab_pom[19]; tab1_t[14]=tab_pom[11]; tab1_t[15]=tab_pom[3];
tab1_t[16]=tab_pom[61]; tab1_t[17]=tab_pom[53]; tab1_t[18]=tab_pom[45]; tab1_t[19]=tab_pom[37]; tab1_t[20]=tab_pom[29]; tab1_t[21]=tab_pom[21]; tab1_t[22]=tab_pom[13]; tab1_t[23]=tab_pom[5];
tab1_t[24]=tab_pom[63]; tab1_t[25]=tab_pom[55]; tab1_t[26]=tab_pom[47]; tab1_t[27]=tab_pom[39]; tab1_t[28]=tab_pom[31]; tab1_t[29]=tab_pom[23]; tab1_t[30]=tab_pom[15]; tab1_t[31]=tab_pom[7];
tab1_t[32]=tab_pom[56]; tab1_t[33]=tab_pom[48]; tab1_t[34]=tab_pom[40]; tab1_t[35]=tab_pom[32]; tab1_t[36]=tab_pom[24]; tab1_t[37]=tab_pom[16]; tab1_t[38]=tab_pom[8];  tab1_t[39]=tab_pom[0];
tab1_t[40]=tab_pom[58]; tab1_t[41]=tab_pom[50]; tab1_t[42]=tab_pom[42]; tab1_t[43]=tab_pom[34]; tab1_t[44]=tab_pom[26]; tab1_t[45]=tab_pom[18]; tab1_t[46]=tab_pom[10]; tab1_t[47]=tab_pom[2];
tab1_t[48]=tab_pom[60]; tab1_t[49]=tab_pom[52]; tab1_t[50]=tab_pom[44]; tab1_t[51]=tab_pom[36]; tab1_t[52]=tab_pom[28]; tab1_t[53]=tab_pom[20]; tab1_t[54]=tab_pom[12]; tab1_t[55]=tab_pom[4];
tab1_t[56]=tab_pom[62]; tab1_t[57]=tab_pom[54]; tab1_t[58]=tab_pom[46]; tab1_t[59]=tab_pom[38]; tab1_t[60]=tab_pom[30]; tab1_t[61]=tab_pom[22]; tab1_t[62]=tab_pom[14]; tab1_t[63]=tab_pom[6];
//kopiowanie posczegolnych (co 8) elementow tablicy tab_pom do tab1_t
return 0;
}

int permutacja_kon_tekstu(int *tab1_t, int *tab3_t, int *tab2_t, char *tekst)
{
int tab_pom[64], i,j;

	//zamiana Li <-> Ri

	for(i=0;i<32;i++)
	tab_pom[i]=tab3_t[i];

j=32;

        for(i=0;i<32;i++)
        {
	tab_pom[j]=tab2_t[i];
	j++;
	}


tab1_t[0]=tab_pom[39];  tab1_t[1]=tab_pom[7];  tab1_t[2]=tab_pom[47];  tab1_t[3]=tab_pom[15];  tab1_t[4]=tab_pom[55];  tab1_t[5]=tab_pom[23];  tab1_t[6]=tab_pom[63];  tab1_t[7]=tab_pom[31];
tab1_t[8]=tab_pom[38];  tab1_t[9]=tab_pom[6];  tab1_t[10]=tab_pom[46]; tab1_t[11]=tab_pom[14]; tab1_t[12]=tab_pom[54]; tab1_t[13]=tab_pom[22]; tab1_t[14]=tab_pom[62]; tab1_t[15]=tab_pom[30];
tab1_t[16]=tab_pom[37]; tab1_t[17]=tab_pom[5]; tab1_t[18]=tab_pom[45]; tab1_t[19]=tab_pom[13]; tab1_t[20]=tab_pom[53]; tab1_t[21]=tab_pom[21]; tab1_t[22]=tab_pom[61]; tab1_t[23]=tab_pom[29];
tab1_t[24]=tab_pom[36]; tab1_t[25]=tab_pom[4]; tab1_t[26]=tab_pom[44]; tab1_t[27]=tab_pom[12]; tab1_t[28]=tab_pom[52]; tab1_t[29]=tab_pom[20]; tab1_t[30]=tab_pom[60]; tab1_t[31]=tab_pom[28];
tab1_t[32]=tab_pom[35]; tab1_t[33]=tab_pom[3]; tab1_t[34]=tab_pom[43]; tab1_t[35]=tab_pom[11]; tab1_t[36]=tab_pom[51]; tab1_t[37]=tab_pom[19]; tab1_t[38]=tab_pom[59]; tab1_t[39]=tab_pom[27];
tab1_t[40]=tab_pom[34]; tab1_t[41]=tab_pom[2]; tab1_t[42]=tab_pom[42]; tab1_t[43]=tab_pom[10]; tab1_t[44]=tab_pom[50]; tab1_t[45]=tab_pom[18]; tab1_t[46]=tab_pom[58]; tab1_t[47]=tab_pom[26];
tab1_t[48]=tab_pom[33]; tab1_t[49]=tab_pom[1]; tab1_t[50]=tab_pom[41]; tab1_t[51]=tab_pom[9];  tab1_t[52]=tab_pom[49]; tab1_t[53]=tab_pom[17]; tab1_t[54]=tab_pom[57]; tab1_t[55]=tab_pom[25];
tab1_t[56]=tab_pom[32]; tab1_t[57]=tab_pom[0]; tab1_t[58]=tab_pom[40]; tab1_t[59]=tab_pom[8];  tab1_t[60]=tab_pom[48]; tab1_t[61]=tab_pom[16]; tab1_t[62]=tab_pom[56]; tab1_t[63]=tab_pom[24];

tekst[0]=128*tab1_t[0]+64*tab1_t[1]+32*tab1_t[2]+16*tab1_t[3]+8*tab1_t[4]+4*tab1_t[5]+2*tab1_t[6]+tab1_t[7];
tekst[1]=128*tab1_t[8]+64*tab1_t[9]+32*tab1_t[10]+16*tab1_t[11]+8*tab1_t[12]+4*tab1_t[13]+2*tab1_t[14]+tab1_t[15];
tekst[2]=128*tab1_t[16]+64*tab1_t[17]+32*tab1_t[18]+16*tab1_t[19]+8*tab1_t[20]+4*tab1_t[21]+2*tab1_t[22]+tab1_t[23];
tekst[3]=128*tab1_t[24]+64*tab1_t[25]+32*tab1_t[26]+16*tab1_t[27]+8*tab1_t[28]+4*tab1_t[29]+2*tab1_t[30]+tab1_t[31];
tekst[4]=128*tab1_t[32]+64*tab1_t[33]+32*tab1_t[34]+16*tab1_t[35]+8*tab1_t[36]+4*tab1_t[37]+2*tab1_t[38]+tab1_t[39];
tekst[5]=128*tab1_t[40]+64*tab1_t[41]+32*tab1_t[42]+16*tab1_t[43]+8*tab1_t[44]+4*tab1_t[45]+2*tab1_t[46]+tab1_t[47];
tekst[6]=128*tab1_t[48]+64*tab1_t[49]+32*tab1_t[50]+16*tab1_t[51]+8*tab1_t[52]+4*tab1_t[53]+2*tab1_t[54]+tab1_t[55];
tekst[7]=128*tab1_t[56]+64*tab1_t[57]+32*tab1_t[58]+16*tab1_t[59]+8*tab1_t[60]+4*tab1_t[61]+2*tab1_t[62]+tab1_t[63];
return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?