Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Реализации различных алгоритмов на Си / шифрование простая подстановка

.doc
Скачиваний:
18
Добавлен:
20.06.2014
Размер:
79.87 Кб
Скачать

3

  1. Задание

Написать программу, осуществляющую кодирование и раскодирование последовательности из входного файла заданным методом и сохраняющую результат в выходной файл. Имена файлов вводит пользователь. Режим работы с файлам – двоичный. Для алгоритмов шифрования/дешифрования пользователь должен вводить также ключ.

Вариант 21

Алгоритм шифрования

1 – метод простой подстановки

  1. Листинг программы

#include <stdlib.h>

#include <conio.h>

#include <stdio.h>

#include <locale.h>

#include <string.h>

char alf[]="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

char *kode(char *S,char *kod)

{

for(int i=0;i<strlen(S);i++)

{

for(int j=0;j<52;j++)

if(S[i]==alf[j])

{

S[i]=kod[j];

break;

}

}

return S;

}

char *rekode(char *S,char *kod)

{

for(int i=0;i<strlen(S);i++)

{

for(int j=0;j<52;j++)

if(S[i]==kod[j])

{

S[i]=alf[j];

break;

}

}

return S;

}

void main()

{

setlocale(LC_ALL,"Rus");

char *S,p,kod[53],word1[52];

int i,k=0;

remove("I:/1bin.txt");

FILE *fp;

S=(char*)malloc(100*sizeof(char));

l1: printf("\nЧто хотите делать?\n1.Закодировать\n2.Раскодировать\n");

p=getch();

if((p!='1')&&(p!='2'))

goto l1;

int s=100*sizeof(char);

for(int i=0;i<53;i++)

kod[i]=alf[i];

if(p=='1')

{

fp=fopen("D:/123.txt","r+");

fgets(S,100,fp);

fclose(fp);

printf("\nВведите кодовое слово: ");

scanf("%s",&word1);

for(i=0;i<strlen(word1);i++)

kod[i]=word1[i];

i=-1;

for(int j=strlen(word1);j<52;j++)

{

re: k=0;

i++;

for(int e=0;e<strlen(word1);e++)

if(word1[e]==alf[i])

k=1;

if(!k)

kod[j]=alf[i];

else

goto re;

}

S=kode(S,kod);

remove("D:/124.txt");

fp=fopen("D:/124.txt","a+");

fprintf(fp,"%s",S);

fclose(fp);

}

else

{

fp=fopen("D:/124.txt","r+");

fgets(S,100,fp);

fclose(fp);

printf("\nВведите кодовое слово: ");

scanf("%s",&word1);

for(i=0;i<strlen(word1);i++)

kod[i]=word1[i];

i=-1;

for(int j=strlen(word1);j<52;j++)

{

re1: k=0;

i++;

for(int e=0;e<strlen(word1);e++)

if(word1[e]==alf[i])

k=1;

if(!k)

kod[j]=alf[i];

else

goto re1;

}

S=rekode(S,kod);

remove("D:/125.txt");

fp=fopen("D:/125.txt","a+");

fprintf(fp,"%s",S);

fclose(fp);

}

printf("\n%s\t%s",S,kod);

fp=fopen("D:/124.txt","r+");

fclose(fp);

goto l1;

getch();

}