📄 main.c
字号:
#include "moje.c"
int main(int argc, char *argv[])
{
int i,j,tab_k[64],tab1_k[56],tab2_k[28],tab3_k[28],tab4_k[48];
int tab1_t[64], tab2_t[32], tab3_t[32], tab4_t[48], tab_xor[48];
int B1[6], B2[6], B3[6], B4[6], B5[6], B6[6], B7[6], B8[6];
int y1[4], y2[4], y3[4], y4[4], y5[4], y6[4], y7[4], y8[4];
int blok_P[32], tab_Ri[32];
unsigned char klucz[8], sciezka1[12], sciezka2[12], tekst[8];
FILE *plik_odczyt, *plik_zapis;
char znak;
long int ilosc,ilosc1;
int x;
system("CLS");//czyszczenie ekranu
do
{//wpisane klucza zgodnie z warunkiem klucz =8
system("CLS");//czyszczenie ekranu
printf("\n\n ---===SZYFROWANIE ALGORYTMEM DES===---\n\n\n\n");//naglowek
printf(" Klucz musi miec 8 znakow\n\n\n");
printf("\n Podaj klucz (8 znakow): ");
gets(klucz);//wprowadzenie klucza
}while(strlen(klucz)!=8);//obliczenie dlugosci klucza i sprawdzenie warunku
system("CLS");//czyszczenie ekranu
printf("\n\t\tPodaj sciezke dostepu pliku zrodlowego: ");
gets(sciezka1);//podanie sciezki pliku ktory chcemy szyfrowac
plik_odczyt=fopen(sciezka1,"rb");//otwarcie pliku z mozliwoscia odczytu binarnie
if(!plik_odczyt)//warunek jesli nastapilo niepoprawne otwracie
{
printf("\n\n\tBlad otwarcia pliku %s", sciezka1);//wyswietla komunikat o bledzie w otwarciu
return (0);
}
printf("\n\t\tPodaj sciezke dostepu pliku docelowego: ");//podanie sciezki pliku do zapisania zaszyfrowanych danych
gets(sciezka2);//podanie sciezki pliku do ktorego zapisujemy zaszyfrowane dane
plik_zapis=fopen(sciezka2,"wb");//otwarcie pliku z mozliwoscia zapisu
if(!plik_zapis)//jesli nastapilo bledne otwarcie pliku
{
printf("\n\n\tBlad otwarcia pliku %s", sciezka2);//wyswietla komunikat o bledzie
return (0);
}
//************************
do{
system("CLS");//czyszcenie ekranu
printf("\n\n ---===SZYFROWANIE ALGORYTMEM DES===---\n\n\n\n");//naglowek
//wybor czynnosci ktora chcemy wykonac
printf("\n\n\t\t1 - szyfrowanie");
printf("\n\n\t\t2 - deszyfrowanie");
printf("\n\n\t\tq - wyjscie");
if(znak=='q'|| znak=='Q') //przerwanie dzialania pliku
return 0;
//wybor szyfrowania lub deszyfrowania
znak=getch();
}while(znak!='1' && znak!='2');//musi zostac podane 1 lub 2
system("CLS");//czyszczenie ekranu
if(znak=='1')//jesli wybor byl rowny 1(szyfrowanie)
{
ilosc=0;//licznik
while(1)
{
i=fgetc(plik_odczyt);//odczyt pojedynczysz znakow z pliku
if(i==EOF)//odczytuj dopoki plik zawiera jakies elementy
break;//gdy i==EOF(brak elementow) przerwij
++ilosc;//zwiekszenie licznika
}
ilosc%=8;//licznik jest rowny reszcie z dzielenia ilosc=ilosc/8
fclose(plik_odczyt);//zamkniecie pliku
plik_odczyt=fopen(sciezka1,"rb");//otwarcie pliku z mozliwoscia odczytu
fputc(ilosc,plik_zapis);//zapis dd pliku po szyfrowaniu licznika
system("CLS");//czyszczenie ekranu
printf("\n\n\t\tTrwa szyfrowanie. Prosze czekac...");//informacja o wykonywanej czynnosci
}
if(znak=='2')//jesli wybor jest rowny 2(deszyfrowanie)
{
ilosc1=0;//licznik
x=fgetc(plik_odczyt);//odczyt znaku
while(1)
{
x=fgetc(plik_odczyt);//odczyt pojedynczych znakow z pliku
if(x==EOF)//dziala dopoki w pliku znajduja sie jekies elementy
break;//gdy x==EOF przerywa dzialanie
++ilosc1;//zwiekszenie licznika
}
fclose(plik_odczyt);//zamkniecie pliku
plik_odczyt=fopen(sciezka1,"rb");//otwarcie pliku
x=fgetc(plik_odczyt);//odczyt znaku
system("CLS");//czyszczenie ekranu
printf("\n\n\t\tTrwa deszyfrowanie. Prosze czekac...");//informacja o aktualnym dzialaniu programu
}
while(ilosc=(fread(tekst,sizeof(unsigned char),8,plik_odczyt)))//skopiowania do tablicy 8 elementow pliku plik_odczyt
{
binarny(klucz,tab_k);//wywolanie funkcji binarny, z parametrem klucz i tab_k
red_klucza(tab_k, tab1_k);//wywolanie funkcji red_klucza
for(i=0;i<28;i++)
tab2_k[i]=tab1_k[i]; //podzial klucza na dwa 8-bitowe bloki /blok nr1/
j=0;
for(i=28;i<56;i++)//podzial klucza na dwa 8-bitowe bloki /blok nr2/
{
tab3_k[j]=tab1_k[i];
j++;
}
binarny(tekst,tab1_t);//wywolanie funkcji binarny
permutacja_pocz_tekstu(tab1_t);//wywolanie funkcji permtuacja_pocz_tekstu
for(i=0;i<32;i++)//podzial na dwa 8 bitowe bloki (blok nr1)
tab2_t[i]=tab1_t[i];
j=0;
for(i=32;i<64;i++)//podzial na dwa 8 bitowe bloki (blok nr2)
{
tab3_t[j]=tab1_t[i];
j++;
}
if(znak=='1')//wybor szyfrowania
szyfrowanie(tab4_k, tab2_k, tab3_k, tab3_t, tab4_t, tab_xor, B1, B2, B3, B4, B5, B6, B7, B8, y1, y2, y3, y4, y5, y6, y7, y8, blok_P, tab_Ri, tab2_t);
//wywolanie funkcji szyfrujacej
if(znak=='2')//wybor deszyfrowania
deszyfrowanie(tab4_k, tab2_k, tab3_k, tab3_t, tab4_t, tab_xor, B1, B2, B3, B4, B5, B6, B7, B8, y1, y2, y3, y4, y5, y6, y7, y8, blok_P, tab_Ri, tab2_t);
//wywlanie funkcji deszyfrujacej
permutacja_kon_tekstu(tab1_t, tab3_t, tab2_t, tekst);//wywolanie funkcji permtuacji konca tekstu
if(znak=='2'&&ilosc1==ftell(plik_odczyt)-1&&x!=0)
{
fwrite(tekst,sizeof(char),x,plik_zapis);
break;
}
else fwrite(tekst,sizeof(char),8,plik_zapis);
if(ilosc!=8)//jesli ilosc rozna od 8
break;//przerwij
}
fclose(plik_odczyt);//zamkniecie pliku
fclose(plik_zapis);//zamkniecie pliku
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -