// first.cpp : Defines the entry point for the console application.
//
читать дальше
#include "stdafx.h"
#include
#include
#include
int minSymbolKey(char* key,int key_length)
{
int min=0;
for (int i = 1; i < key_length; i++)
if (key[i] < key[min])
min=i;
key[min]=255;
return min;
}
int main()
{
FILE *text, *crypt, *decrypt;
text = fopen("text.txt", "r");
crypt = fopen("crypt.txt", "w");
decrypt = fopen("decrypt.txt", "w");
char symbol[100], key[10], tmp, copy_key[10];
int min, key_length, text_length = 0, n;
printf("Enter key : ");
scanf("%s", key);
key_length = strlen(key);
//читаем из файла, и проверяем на наличие пробелов и других лишних символов
while(!feof(text))
{
fscanf(text, "%c", &tmp);
if (tmp >= 'А' && tmp <= 'я')
{
symbol[text_length] = tmp;
text_length++;
}
}
//меняем регистр
for (int i = 0; i < text_length; i++)
if(symbol[i] >= 'а' && symbol[i] <= 'я')
symbol[i] = symbol[i]-'а'+'А';
n = text_length/(key_length * key_length)+1;//cчитаем количество блоков
for (int block = 0; block < n; block++)
{
for (int i = 0; i < key_length; i++)//копируем ключ
copy_key[i] = key[i];
//кодирование
if (!block == n-1)//если блок не последний
{
for(int k = 0; k < key_length; k++)
{
min = minSymbolKey(copy_key, key_length);
for (int i = min + block * key_length * key_length; i < (block+1)* key_length * key_length; i += key_length)
{
fprintf(crypt, "%c", symbol[i]);
}
fprintf(crypt, "%c", ' ');
copy_key[min] = 'я'+1;
}
}
else if( block = n-1)//если блок последний
{
for(int k = 0; k < key_length; k++)
{
min = minSymbolKey(copy_key, key_length);//находим номер минимального символа в ключе
for (int i = min + block * key_length * key_length; i < text_length - 1; i += key_length)
{
fprintf(crypt, "%c", symbol[i]);
}
fprintf(crypt, "%c",' ');
copy_key[min] = 'я'+1; //приравниваем минимальный символ в ключе к "я+1" что бы дальше при сравнении он не учитывался
}
}
}
//декодирование
crypt = fopen("crypt.txt", "r");
char temp[100];
int ind = 0;
for (int block = 0; block < text_length; block+=key_length*key_length)
{
for (int i = 0; i < key_length; i++)//копируем ключ
copy_key[i] = key[i];
for(int i = 0; i < key_length; i++)
{
int j = minSymbolKey(copy_key, key_length);
while ((j= 'А' && symbol[i] <= 'Я')
symbol[i] = symbol[i]-'А'+'а';
}
for(int i = 1; i <= n; i++)
fprintf(decrypt, "%c", temp[i]);
//fcloseall();
//printf("%d", min);
return 0;
}