Advertisement
Val_Kir

lab 6

Jun 24th, 2016
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.15 KB | None | 0 0
  1. /* Задан текстовый файл. Зашифруйте его байтовым ключом по операции "сложение по модулю два".
  2.    В первый байт зашифрованного файла записать ключ шифрования. Расшифровать этот файл.*/
  3.  
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7.  
  8. void Code(FILE *in,FILE *out, char key) //функция кодирования
  9. {
  10.     char z;
  11.     fputc(key,out); //записывает символ и смещает указатель
  12.     z=fgetc(in); //читает символ, увеличивает указатель
  13.     while(!feof(in)) //пока не конец файла
  14.     {
  15.         z=z^key;
  16.         fputc(z,out);
  17.         z=fgetc(in);
  18.     }
  19. }
  20.  
  21. void Decode(FILE *in,FILE *out) //функция декодирования
  22. {
  23.     char z,key=fgetc(in);
  24.     z=fgetc(in);
  25.     while(!feof(in)) //идем пока не конец файла
  26.     {
  27.         z=z^key;
  28.         fputc(z,out);
  29.         z=fgetc(in);
  30.     }
  31.    
  32. }
  33.  
  34. FILE* fopen_secure(const char fname[], const char mode[]) //функция безопасного открытия
  35. {
  36.     FILE *f=fopen(fname, mode);
  37.     if(f==NULL) //если fopen возвращает нулевой указатель, то выводит ошибку
  38.     {
  39.         fclose(f);
  40.         printf("Cannot open file %s with mode %s\n", fname, mode);
  41.         exit(0);
  42.     }
  43.     return f;
  44. }
  45.  
  46. void main()
  47. {
  48.     FILE *f1,*f2,*f3; //исходник,зашифрованный, расшифрованный
  49.     char key;
  50.     printf("Enter key: ");
  51.     scanf("%с",&key);
  52.     f1=fopen_secure("f1.txt","r"); //открывается сущ. файл для чтения
  53.     f2=fopen_secure("f2.txt","w+"); //создается новый файл для чтения и записи
  54.     f3=fopen_secure("f3.txt","w"); //открывается новый файл для записи, если файл с таким именем был, то его содержимое теряется
  55.     Code(f1,f2,key);
  56.     fseek(f2,0,SEEK_SET); //смещаемся в начало файла; файл, смещение, начало отсчета
  57.     Decode(f2,f3);
  58.     fcloseall();
  59.     getchar();
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement