Witam.
Na zajęcia projektowe mam zrobić całą implementację DES.
W kodzie źródłowym jest coś pomieszane w funkcji szyfrowanie i deszyfrowanie, reszta jest zrobiona jak napisane w książce.
Siedziałem nad tym dziś cały dzień i nie jestem w stanie tego samodzielnie poprawić bez żadnych wskazówek od bardziej ogarniętych osób.
Mam czas do piątku i ten projekt zaważa o tym czy uda mi się przejść na następny rok ;)
Tutaj liczę na waszą wszelką pomoc. Z góry dziękuje i czekam na wskazówki ! :)

Szyforanie i deszyfrowanie to praktycznie to samo tylko przy deszyfrowaniu klucze muszą być użyte w odwrotnej kolejności.

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

kod źródłowy: