Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #define MAXDL 1000
- void harry();
- void szyfr();
- void wielkielitery(char* tablica); // Konwersja malych liter na wielkie
- int sprawdzanieklucza(char* klucz); //funkcja sprawdza, czy w kluczu nie powtarzaja sie litery - jesli tak, prosi o wprowadzenie poprawnego
- void szyfrowanie(char* klucz, char* zdanie);
- int program(char* klucz);
- extern float A; extern float B;extern float C;extern float D;extern float E;extern float F;extern float G;extern float H;extern float I;extern float J;extern float K;extern float L;extern float M;extern float U;extern float N;
- extern float O;extern float P;extern float Q;extern float R;extern float S;extern float T;extern float V;extern float W;extern float X;extern float Y;extern float Z;
- extern float a; extern float b;extern float c;extern float d;extern float e;extern float f;extern float g;extern float h;extern float i;extern float j;extern float k;extern float l;extern float m;extern float u;extern float n;
- extern float o;extern float p;extern float q;extern float r;extern float s;extern float t;extern float v;extern float w;extern float x;extern float y;extern float z;
- int main()
- {
- harry();
- char klucz[100];
- FILE* wejscie, *wyjscie;
- wejscie=fopen("klucz.txt","r");
- if(wejscie==NULL) {printf("Nie udalo sie otworzyc pliku!"); exit(1);}
- if(fscanf(wejscie,"%s",&klucz)!=1) {fprintf(stderr,"Nie udalo sie odczytac klucza z pliku!\n"); exit(4);}
- wielkielitery(klucz);
- fclose(wejscie);
- printf("Program symuluje dzialanie szyfru harcerskiego\n");
- while(program(klucz));
- wyjscie=fopen("klucz.txt","w"); if(wyjscie==NULL) {printf("Nie udalo sie zapisac do pliku"); exit(2);}
- fprintf(wyjscie,"%s",klucz);
- fclose(wyjscie);
- return 0;
- }//main
- int program(char* klucz)
- {
- FILE* zdanieplik, *zaszyfrowane;
- FILE *slownik;
- char zdanie[MAXDL];
- int wybor, status=1;
- printf("\n\n[1] Zmiana klucza (obecnie - %s) (zostanie zapisany do pliku)\n",klucz);
- printf("[2] Szyfrowanie zdania/Deszyfracja\n");
- printf("[3] Proba dekryptazu\n");
- printf("[4] Koniec\n");
- do{ //Oproznianie bufora znakowego -zabezpieczenie przed wprowadzeniem nieprawidlowych danych do scanf
- status=scanf("%d",&wybor);
- while(getchar() !='\n');
- }while(status !=1);
- switch (wybor)
- {
- case 1: //zmiana klucza
- do
- {
- printf("\n\nPodaj klucz (max 100 znakow, pojedyncze slowo)\n");
- do{ //Oproznianie bufora np przy wpisaniu kilku slow do klucza
- status=scanf("%s",klucz);
- while(getchar() !='\n');
- }while (status != 1);
- }while(sprawdzanieklucza(klucz));
- wielkielitery(klucz);
- return 1;
- case 2: //szyforwanie/deszyfrowanie
- zdanieplik=fopen("zdanie.txt","r"); if(zdanieplik==NULL) {printf("Nie udalo sie odczytac zdania do zaszyfrowania"); exit(3);}
- zaszyfrowane=fopen("zaszyfrowane.txt","w");
- while(fgets(zdanie,MAXDL,zdanieplik)!=NULL)
- {
- wielkielitery(zdanie);
- szyfrowanie(klucz,zdanie);
- puts(zdanie);
- fputs(zdanie,zaszyfrowane);
- }
- puts("Zapisano do pliku zaszyfrowane.txt");
- return 1;
- case 3:
- slownik=fopen("klucze.txt","r");
- if(slownik==NULL) {printf("Nie udalo sie otworzyc pliku!"); exit(1);}
- while(fscanf(slownik,"%s",klucz))
- {
- if(fscanf(slownik,"%s",klucz)!=1) {fprintf(stderr,"Nie udalo sie odczytac klucza z pliku!\n"); exit(4);}
- zdanieplik=fopen("zdanie.txt","r"); if(zdanieplik==NULL) {printf("Nie udalo sie odczytac zdania do zaszyfrowania"); exit(3);}
- zaszyfrowane=fopen("zaszyfrowane.txt","w");
- while(fgets(zdanie,MAXDL,zdanieplik)!=NULL)
- {
- wielkielitery(zdanie);
- szyfrowanie(klucz,zdanie);
- fputs(zdanie,zaszyfrowane);
- }
- fclose(zaszyfrowane);
- szyfr();
- if((a<=A+0.005 && a>=A-0.005) && (b<=B+0.005 && b>=B-0.005) && (c<=C+0.005 && c>=C-0.005) && (d<=D+0.005 && d>=D-0.005)
- && (e<=E+0.005 && e>=E-0.005) && (f<=F+0.005 && f>=F-0.005) && (g<=G+0.005 && g>=G-0.005) && (h<=H+0.005 && h>=H-0.005)
- && (i<=I+0.005 && i>=I-0.005) && (j<=J+0.005 && i>=J-0.005) && (k<=K+0.005 && k>=K-0.005) && (l<=L+0.005 && l>=L-0.005)
- && (m<=M+0.005 && m>=M-0.005) && (n<=N+0.005 && n>=N-0.005) && (o<=O+0.005 && o>=O-0.005) && (p<=P+0.005 && p>=P-0.005)
- && (q<=Q+0.005 && q>=Q-0.005) && (r<=R+0.005 && r>=R-0.005) && (s<=S+0.005 && s>=S-0.005) && (t<=T+0.005 && t>=T-0.005)
- && (u<=U+0.005 && u>=U-0.005) && (v<=V+0.005 && v>=V-0.005) && (w<=W+0.005 && w>=W-0.005) && (x<=X+0.005 && x>=X-0.005)
- && (y<=Y+0.005 && y>=Y-0.005) && (z<=Z+0.005 && z>=Z-0.005)) break;
- }
- puts("Zapisano do pliku zaszyfrowane.txt");
- default:
- return 0;
- }//switch
- }//program
- void wielkielitery(char* tablica) // Konwersja malych liter na wielkie
- {
- int i;
- for(i=0;i<=strlen(tablica);++i)
- if(tablica[i]>=96 && tablica[i]<=123) tablica[i]-=32;
- }//wielkielitery
- int sprawdzanieklucza(char* klucz) //funkcja sprawdza, czy w kluczu nie powtarzaja sie litery - jesli tak, prosi o wprowadzenie poprawnego
- {
- int i;
- for(i=0;i<=strlen(klucz);i++)
- if(strchr(klucz,klucz[i])!=strrchr(klucz,klucz[i])) //Sprawdzenie, czy pierwsza pozycja na ktorej wystepuje dany znak jest rowna ostatniej, na ktorej wystepuje
- {printf("\nW kluczu powtarzaja sie znaki! Wprowadz poprawny klucz"); return 1;}
- return 0;
- }//sprawdzanieklucza
- void szyfrowanie(char* klucz, char* zdanie)
- {
- int p=0, n=0; // p->klucz n->zdanie
- while(zdanie[n]!='\0') //PETLA SZYFRUJACA
- if(klucz[p]==zdanie[n])
- {
- if(p%2==1) //Dla reszty z dzielenia rownej 1 zamieniamy na pierwsza litere z pary
- zdanie[n]=klucz[p-1];
- else
- if(klucz[p+1]!='\0')
- zdanie[n]=klucz[p+1];
- ++n;
- p=0;
- }//if
- else
- {
- if(klucz[p]!='\0') //Dopoki nie sprawdzilismy wszystkich wyrazow klucza
- ++p; //Zwiekszamy p - sprawdzamy kolejny wyraz klucza
- else
- {
- ++n; //Jesli znaku nie ma w kluczu - sprawdzamy nastepna litere zdania
- p=0;
- }
- }//pierwszyelse
- }//szyfrowanie
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement