-
Notifications
You must be signed in to change notification settings - Fork 0
/
kurs1.c
104 lines (100 loc) · 3.1 KB
/
kurs1.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
using namespace std;
string encode(long lSize, long * lKey, string fPath) //кодируем
{
long i, j;
string text, line, encstr;
ifstream ifs(fPath.c_str());
if(!ifs)
cout<<"Error open file : "<<fPath.c_str()<<endl; // читаем файлик
else
{
while(getline(ifs,line))
text += line;
ifs.close();
cout<<"input string : "<<text.c_str()<<endl;
for(i = 0; i < text.length(); i += lSize) //простой алгоритм кодирывания по ключу
{
line = "";
for(j = 0; j < lSize; j++)
line += text[i + j];
for(j = 0; j < lSize; j++)
encstr += line[lKey[j]];
}
}
return encstr;
}
string decode(long lSize, long * lKey, string fPath) //декодируем
{
long i, j;
string text, line, decstr;
ifstream ifs(fPath.c_str());
if(!ifs)
cout<<"Error open file : "<<fPath.c_str()<<endl; //читаем файл
else
{
while(getline(ifs,line))
text += line;
ifs.close();
cout<<"input string : "<<text.c_str()<<endl;
decstr = text;
for(i = 0; i < text.length(); i += lSize) // алгоритм декодирывания
{
for(j = 0; j < lSize; j++)
decstr[i + lKey[j]] = text[i + j];
}
}
return decstr;
}
int main()
{ //переменные
char chr;
long lKey[5] = {0};
long i, lSize= sizeof(lKey)/sizeof(lKey[0]);
bool bMenu = true;
string text;
while(bMenu)
{
cout<<"***MENU***\n"; //меню
cout<<"E - encode\n";
cout<<"D - decode\n";
cout<<(chr = getch())<<endl;
switch(toupper(chr))
{
case 'E':
cout<<"Enter key-block : \n"; //запрос ключа
for(i = 0; i < lSize; i++)
{
cout<<"KEY["<<i + 1<<"] = ";
cin>>lKey[i];
}
text = encode(lSize, lKey, "encode.txt"); //забираем текст из файла передаем в функцию
cout<<"Encoded text : "<<text.c_str()<<endl;
break;
case 'D':
cout<<"Enter key-block : \n"; //опють просим ключ
for(i = 0; i < lSize; i++)
{
cout<<"KEY["<<i + 1<<"] = ";
cin>>lKey[i];
}
text = decode(lSize, lKey, "decode.txt"); //бпрем данные из файла декодируем по ключу
cout<<"Decoded text : "<<text.c_str()<<endl;
break;
default:
cout<<"Unsupported key is pressed\n";
break;
}
cout<<"Press Y for see MENU once again\n"; // просим выйти или продолжить
cout<<"Any other key - EXIT\n";
cout<<(chr = getch())<<endl;
if(toupper(chr) != 'Y')
bMenu = false;
system("cls");
}
system("pause"); //задержка
return 0;
}