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: