//Szyfr przestawieniowy //wykonal Grzegorz G¹siewski //pobrano ze strony http://gege01.prv.pl #include #include #include #include int main() { int szyfrowanie(int *tab); int deszyfrowanie(int *tab); int* zamiana(int ilosc); int strona_gl(int *tab); int x,licznik_1, licznik_2,buf, tab[2000],ziarno; ziarno=0; clrscr(); gotoxy(21,2); printf("SZYFROWANIE PPZEZ PODSTAWIANIE"); gotoxy(20,20); printf("program wykonal Grzegorz Gasiewski"); gotoxy(20,22); printf("http:\\\\gege01.prv.pl gege01@wp.pl"); gotoxy(20,10); printf("Standardowe ziarno = 0"); gotoxy(20,12); printf("Podaj ziarno: "); scanf("%d",&ziarno); getchar(); gotoxy(20,14); printf("ziarno = %d",ziarno); delay(800); srand(ziarno); licznik_2=0; //zapelnianie tablicy wartosciami 0..1999 <=> kody ASCII for(licznik_1=0;licznik_1<=1999;licznik_1++) tab[licznik_1]=licznik_1; for(licznik_1=1;licznik_1<=100;licznik_1++) //ponizsza zamiana wyk. 100 razy { for(licznik_2=0;licznik_2<=999;licznik_2++) //zamiana miejscami { // 0..999<=>1000..1999 x=random(1000-1)+1000; buf=tab[licznik_2]; tab[licznik_2]=tab[x]; tab[x]=buf; } } strona_gl(tab); return 0; } int* zamiana(int ilosc) { int *t_1, licznik_1, licznik_2, x,buf; t_1=(int*)malloc(ilosc*sizeof(int)); for(licznik_1=0;licznik_1=ilosc)) {x=x-1; printf("\nbbb"); getchar();} buf=t_1[licznik_2]; t_1[licznik_2]=t_1[x]; t_1[x]=buf; } } return t_1; } int szyfrowanie(int *tab) { FILE *plik_odczyt, *plik_zapis; char sciezka_1[12], sciezka_2[12]; int ilosc, licznik_1, licznik_2, *t_1; unsigned char tablica_1[2000], tablica_2[2000]; clrscr(); gotoxy(10,10); printf("Podaj sciezke dostepu pliku zrodlowego: "); gets(sciezka_1); plik_odczyt=fopen(sciezka_1,"rb"); if(!plik_odczyt) { gotoxy(26,14); printf("Blad otwarcia pliku %s", sciezka_1); delay(2000); return (0); } gotoxy(10,12); printf("Podaj sciezke dostepu pliku zaszyfrowanego: "); gets(sciezka_2); plik_zapis=fopen(sciezka_2,"wb+"); if(!plik_zapis) { gotoxy(26,14); printf("Blad otwarcia pliku %s", sciezka_2); delay(2000); return (0); } clrscr(); gotoxy(20,10); printf("Trwa szyfrowanie. Prosze czekac..."); while((ilosc=(fread(tablica_1,sizeof(char),2000,plik_odczyt)))==2000) //wczytanie do tablicy 2kb { for(licznik_1=0;licznik_1<=1999;licznik_1++) tablica_2[tab[licznik_1]]=tablica_1[licznik_1]; //szyfrowanie fwrite(tablica_2,sizeof(char),2000,plik_zapis); } if(ilosc>0) { t_1=zamiana(ilosc); fread(tablica_1,sizeof(char),ilosc,plik_odczyt); for(licznik_1=0;licznik_1 ..."); getchar(); return 0; } int deszyfrowanie(int *tab) { FILE *plik_odczyt, *plik_zapis; char sciezka_1[12], sciezka_2[12]; int ilosc, licznik_1,licznik_2, *t_1; unsigned char tablica_1[2000], tablica_2[2000]; clrscr(); gotoxy(10,10); printf("Podaj sciezke dostepu pliku zaszyfrowanego: "); gets(sciezka_1); plik_odczyt=fopen(sciezka_1,"rb"); if(!plik_odczyt) { gotoxy(26,14); printf("Blad otwarcia pliku %s", sciezka_1); delay(2000); return (0); } gotoxy(10,12); printf("Podaj sciezke dostepu pliku odszyfrowanego: "); gets(sciezka_2); plik_zapis=fopen(sciezka_2,"wb+"); if(!plik_zapis) { gotoxy(26,14); printf("Blad otwarcia pliku %s", sciezka_2); delay(2000); return (0); } clrscr(); gotoxy(20,10); printf("Trwa deszyfrowanie. Prosze czekac..."); while((ilosc=(fread(tablica_1,sizeof(char),2000,plik_odczyt)))==2000) //wczytanie do tablicy 2kb { for(licznik_1=0;licznik_1<=1999;licznik_1++) for(licznik_2=0;licznik_2<=1999;licznik_2++) if(licznik_1==tab[licznik_2]) tablica_2[licznik_2]=tablica_1[licznik_1]; //deszyfrowanie fwrite(tablica_2,sizeof(char),2000,plik_zapis); } if(ilosc>0) { t_1=zamiana(ilosc); fread(tablica_1,sizeof(char),ilosc,plik_odczyt); //deszyfrowanie for(licznik_1=0;licznik_1 ..."); getchar(); return 0; } int strona_gl(int *tab) { char znak; do{ clrscr(); gotoxy(21,2); printf("SZYFROWANIE PPZEZ PRZESTAWIANIE"); gotoxy(22,6); printf("Jaka operacje chcesz wykonac?"); gotoxy(22,8); printf("1 - szyfrowanie"); gotoxy(22,10); printf("2 - deszyfrowanie"); gotoxy(22,12); printf("q - wyjscie"); gotoxy(20,18); printf("program wykonal Grzegorz Gasiewski"); gotoxy(20,20); printf("http:\\\\gege01.prv.pl gege01@wp.pl"); znak=getch(); switch(znak){ case '1':szyfrowanie(tab); return 0; case '2':deszyfrowanie(tab); return 0; case ('q'): return 0; case ('Q'): return 0; default: gotoxy(22,14); printf("Nacisnij '1', '2' lub 'q'"); sound(2000); delay(500); nosound();} }while((znak!='1')&&(znak!='2')); return 0; }