Advertisement
Guest User

Untitled

a guest
Oct 25th, 2014
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.97 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #define MAXDL 1000
  5.  
  6. void harry();
  7. void szyfr();
  8. void wielkielitery(char* tablica); // Konwersja malych liter na wielkie
  9. int sprawdzanieklucza(char* klucz); //funkcja sprawdza, czy w kluczu nie powtarzaja sie litery - jesli tak, prosi o wprowadzenie poprawnego
  10. void szyfrowanie(char* klucz, char* zdanie);
  11. int program(char* klucz);
  12.  
  13. 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;
  14. 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;
  15.  
  16. 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;
  17. 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;
  18.  
  19. int main()
  20. {
  21. harry();
  22. char klucz[100];
  23. FILE* wejscie, *wyjscie;
  24. wejscie=fopen("klucz.txt","r");
  25. if(wejscie==NULL) {printf("Nie udalo sie otworzyc pliku!"); exit(1);}
  26. if(fscanf(wejscie,"%s",&klucz)!=1) {fprintf(stderr,"Nie udalo sie odczytac klucza z pliku!\n"); exit(4);}
  27. wielkielitery(klucz);
  28. fclose(wejscie);
  29.  
  30.  
  31. printf("Program symuluje dzialanie szyfru harcerskiego\n");
  32. while(program(klucz));
  33. wyjscie=fopen("klucz.txt","w"); if(wyjscie==NULL) {printf("Nie udalo sie zapisac do pliku"); exit(2);}
  34. fprintf(wyjscie,"%s",klucz);
  35. fclose(wyjscie);
  36. return 0;
  37. }//main
  38.  
  39. int program(char* klucz)
  40. {
  41. FILE* zdanieplik, *zaszyfrowane;
  42. FILE *slownik;
  43. char zdanie[MAXDL];
  44. int wybor, status=1;
  45. printf("\n\n[1] Zmiana klucza (obecnie - %s) (zostanie zapisany do pliku)\n",klucz);
  46. printf("[2] Szyfrowanie zdania/Deszyfracja\n");
  47. printf("[3] Proba dekryptazu\n");
  48. printf("[4] Koniec\n");
  49.  
  50. do{ //Oproznianie bufora znakowego -zabezpieczenie przed wprowadzeniem nieprawidlowych danych do scanf
  51. status=scanf("%d",&wybor);
  52. while(getchar() !='\n');
  53. }while(status !=1);
  54.  
  55. switch (wybor)
  56. {
  57. case 1: //zmiana klucza
  58. do
  59. {
  60. printf("\n\nPodaj klucz (max 100 znakow, pojedyncze slowo)\n");
  61. do{ //Oproznianie bufora np przy wpisaniu kilku slow do klucza
  62. status=scanf("%s",klucz);
  63. while(getchar() !='\n');
  64. }while (status != 1);
  65. }while(sprawdzanieklucza(klucz));
  66. wielkielitery(klucz);
  67. return 1;
  68.  
  69. case 2: //szyforwanie/deszyfrowanie
  70. zdanieplik=fopen("zdanie.txt","r"); if(zdanieplik==NULL) {printf("Nie udalo sie odczytac zdania do zaszyfrowania"); exit(3);}
  71. zaszyfrowane=fopen("zaszyfrowane.txt","w");
  72. while(fgets(zdanie,MAXDL,zdanieplik)!=NULL)
  73. {
  74. wielkielitery(zdanie);
  75. szyfrowanie(klucz,zdanie);
  76. puts(zdanie);
  77. fputs(zdanie,zaszyfrowane);
  78. }
  79. puts("Zapisano do pliku zaszyfrowane.txt");
  80. return 1;
  81. case 3:
  82. slownik=fopen("klucze.txt","r");
  83. if(slownik==NULL) {printf("Nie udalo sie otworzyc pliku!"); exit(1);}
  84. while(fscanf(slownik,"%s",klucz))
  85. {
  86. if(fscanf(slownik,"%s",klucz)!=1) {fprintf(stderr,"Nie udalo sie odczytac klucza z pliku!\n"); exit(4);}
  87. zdanieplik=fopen("zdanie.txt","r"); if(zdanieplik==NULL) {printf("Nie udalo sie odczytac zdania do zaszyfrowania"); exit(3);}
  88. zaszyfrowane=fopen("zaszyfrowane.txt","w");
  89. while(fgets(zdanie,MAXDL,zdanieplik)!=NULL)
  90. {
  91. wielkielitery(zdanie);
  92. szyfrowanie(klucz,zdanie);
  93. fputs(zdanie,zaszyfrowane);
  94. }
  95. fclose(zaszyfrowane);
  96. szyfr();
  97. 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)
  98. && (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)
  99. && (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)
  100. && (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)
  101. && (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)
  102. && (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)
  103. && (y<=Y+0.005 && y>=Y-0.005) && (z<=Z+0.005 && z>=Z-0.005)) break;
  104. }
  105. puts("Zapisano do pliku zaszyfrowane.txt");
  106. default:
  107. return 0;
  108. }//switch
  109. }//program
  110.  
  111. void wielkielitery(char* tablica) // Konwersja malych liter na wielkie
  112. {
  113. int i;
  114. for(i=0;i<=strlen(tablica);++i)
  115. if(tablica[i]>=96 && tablica[i]<=123) tablica[i]-=32;
  116. }//wielkielitery
  117.  
  118. int sprawdzanieklucza(char* klucz) //funkcja sprawdza, czy w kluczu nie powtarzaja sie litery - jesli tak, prosi o wprowadzenie poprawnego
  119. {
  120. int i;
  121. for(i=0;i<=strlen(klucz);i++)
  122. if(strchr(klucz,klucz[i])!=strrchr(klucz,klucz[i])) //Sprawdzenie, czy pierwsza pozycja na ktorej wystepuje dany znak jest rowna ostatniej, na ktorej wystepuje
  123. {printf("\nW kluczu powtarzaja sie znaki! Wprowadz poprawny klucz"); return 1;}
  124. return 0;
  125. }//sprawdzanieklucza
  126.  
  127. void szyfrowanie(char* klucz, char* zdanie)
  128. {
  129. int p=0, n=0; // p->klucz n->zdanie
  130. while(zdanie[n]!='\0') //PETLA SZYFRUJACA
  131. if(klucz[p]==zdanie[n])
  132. {
  133. if(p%2==1) //Dla reszty z dzielenia rownej 1 zamieniamy na pierwsza litere z pary
  134. zdanie[n]=klucz[p-1];
  135. else
  136. if(klucz[p+1]!='\0')
  137. zdanie[n]=klucz[p+1];
  138. ++n;
  139. p=0;
  140. }//if
  141. else
  142. {
  143. if(klucz[p]!='\0') //Dopoki nie sprawdzilismy wszystkich wyrazow klucza
  144. ++p; //Zwiekszamy p - sprawdzamy kolejny wyraz klucza
  145. else
  146. {
  147. ++n; //Jesli znaku nie ma w kluczu - sprawdzamy nastepna litere zdania
  148. p=0;
  149. }
  150. }//pierwszyelse
  151. }//szyfrowanie
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement