Реализация шифрования Виженера на СИ
Привиденныё код реализует шифрование методом Виженера текстового файла состоящего из английский букв. Все пробелы опускаются, т.к если их оставить полученый шифротекст будет довольно просто взломать. Этот код так же легко переделать для работы с русским алфавитом и вообще всеми символами, что даст возможность шифровать так же и бинарные файлы, т.е файлы любого типа. После шифрования и закрытия фалов идет расшифровка и запись результата вотдельный файл(сделано для наглядности и проверки работоспособности). при надобности без проблем разделяется на 2 самостоятельные программы шифрования и расшифровки по методу Виженера.
#include <stdio.h>
int main(int argc, char *argv[]){
FILE *f1;
FILE *f2;
char fname[100];
char key[100];
char c;
int cur=0;
f2=fopen("output.txt","w");
printf("file name: ");
scanf("%s",fname);
f1=fopen(fname,"r");
if (f1==NULL) {
printf("file not found\n");
return 0;
}
printf("key: ");
scanf("%s",key);
while (!feof(f1)){
if (fread(&c,1,1,f1)){
if ((c>=97)&&(c<=122)){
if ( (c+key[cur]-97)<=122) c=c+key[cur]-97; else
c=key[cur]+c-123;
fprintf(f2,"%c",c);
if (cur<strlen(key)-1) ++cur; else cur=0;
}
}
}
fclose(f1);
fclose(f2);
f1=fopen("output.txt","r");
f2=fopen("output2.txt","w");
cur=0;
while (!feof(f1)){
if (fread(&c,1,1,f1)){
if ((c>=97)&&(c<=122)){
if ( (c-key[cur]+97)>=97) c=c-key[cur]+97; else
c=c-key[cur]+123;
fprintf(f2,"%c",c);
if (cur<strlen(key)-1) ++cur; else cur=0;
}
}
}
fclose(f1);
fclose(f2);
return 0;
}