- •Министерство образования и науки украины
- •Литература
- •Аннотация
- •Алгоритмы обработки понятий нечеткой логики
- •Что такое нечеткое множество?
- •Операции с нечеткими множествами
- •Нечеткое управление
- •1 Шифры сложной замены
- •1.1 Шифр Гронсфельда
- •1.2 Шифр Вижинера
- •1.3 Шифр "двойной квадрат" Уитстона
- •1.4 Оценка секретности шифра
- •1.5 Шифр Вернама
- •2 Разработка программного продукта
- •Список литературы
- •Приложение а
Список литературы
1. А.В.Яковлев, А.А.Безбогов, В.В.Родин, В.Н.Шамкин. Криптографическая защита информации. – Тамбов:Из-во Тамб. Гос. Тех.. ун-та, 2006. – 140 с.
2. Ю.В.Романец, П.А.Тимофеев, В.Ф.Шаньгин. Защита информации в компьютерных системах и сетях./ под ред. В.Ф.Шаньгина – М.: Радио и свіязь, 2001. – 376с.
3. Остапов С.Е., Валь Л.О. Основи криптографії: Навчальний посібник. – Чернівці: Книга – ХХІ, 2008. – 188 с.
4. Б.Шнайер. Прикладная криптография. Протоколы, алгоритмы, исходные коды на языке С. 1996.
5. М.Масленников. Практическая криптография. БХВ-Петербург,2003. – 464с.
Приложение а
Листинг программы:
#include <iostream>
#include <time.h>
#include <windows.h>
using namespace std;
void main()
{
srand(time(NULL));
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
char a, work = '1', alphabet[] = {'а','б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я', ',', ' ', '.', '\0'}; // массив русского алфавита
const int n = 6; // размерность квадратов
int x = 0, y = 0, i1 = 0, j1 = 0, i_text = 0; // индексы
char **square1 = new char*[n], **square2 = new char*[n]; // создание квадратов Уитстона и их строк
char* text = new char; // текст для шифрования или дешифрования
for (int i = 0; i < n; i++) // создание столбцов квадратов
{
square1[i] = new char[n];
square2[i] = new char[n];
for (int j = 0; j < n; j++)
{
square1[i][j] = ' ';
square2[i][j] = ' ';
}
}
for (int i = 0; i < strlen(alphabet); i++) // заполнение первого квадрата алфавитом
{
n:
x = rand()%n;
y = rand()%n;
if (square1[x][y] == ' ')
square1[x][y] = alphabet[i];
else goto n;
}
for (int i = 0; i < strlen(alphabet); i++) // заполнение второго квадрата алфавитом
{
m:
x = rand()%n;
y = rand()%n;
if (square2[x][y] == ' ')
square2[x][y] = alphabet[i];
else goto m;
}
cout << "Первый квадрта Уитстона" << endl;
for (int i = 0; i < n; i++)// вывод первого квадрата
{
for (int j = 0; j < n; j++)
cout << square1[i][j] << " ";
cout << endl;
}
cout << "Второй квадрта Уитстона" << endl;
for (int i = 0; i < n; i++)// вывод второго квадрата
{
for (int j = 0; j < n; j++)
cout << square2[i][j] << " ";
cout << endl;
}
while (work == '1')
{
cout << "Введите 1 для шифрования или 0 для дешифрования" << endl;
while (!(cin >> a) || (a != '1' && a != '0')) cout << "Неправильный ввод, повторите еще раз" << endl;
if (a == '1')
{
cout << "Введите сообщение для шифрования" << endl;
cin.get();
cin.getline(text, 100);
for (int i = 0; i < strlen(text); i++) // начало шифрования
for (int j = 0; j < n; j++)
for (int k = 0; k < n; k++)
if (i % 2 == 0) // разбивка сообщения на биграммы
{
if (text[i] == square1[j][k])
{
i1 = j;
j1 = k;
i_text = i;
}
}else if (text[i] == square2[j][k])
if (i1 != j) // замена биграммы при условии разных строк
{
text[i_text] = square2[i1][k];
text[i] = square1[j][j1];
j = n; k = n;
}
else // замена биграммы при условии одной строки
{
text[i_text] = square2[j][j1];
text[i] = square1[j][k];
j = n; k = n;
}
cout << text << endl; // вывод зашифрованного сообщения
}
else if (a == '0')
{
cout << "Введите сообщение для дешифрования" << endl;
cin.get();
cin.getline(text, 100);
for (int i = 0; i < strlen(text); i++) // начало дешифрования
for (int j = 0; j < n; j++)
for (int k = 0; k < n; k++)
if (i % 2 == 0) // разбивка сообщения на биграммы
{
if (text[i] == square2[j][k])
{
i1 = j;
j1 = k;
i_text = i;
}
}else if (text[i] == square1[j][k])
if (i1 != j) // замена биграммы при условии разных строк
{
text[i_text] = square1[i1][k];
text[i] = square2[j][j1];
j = n; k = n;
}
else // замена биграммы при условии одной строки
{
text[i_text] = square1[j][j1];
text[i] = square2[j][k];
j = n; k = n;
}
cout << text << endl; // вывод расшифрованного сообщения
}
cout << "Продожить работу?(1 - да, 0 - нет)" << endl;
while (!(cin >> work) || (work != '1' && work != '0')) cout << "Неправильный ввод, повторите еще раз" << endl;
}
system("pause");
}