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

Практические работы Часть 2 / Практическая работа 1 / Практическая работа 1 Отчет

.docx
Скачиваний:
52
Добавлен:
24.07.2019
Размер:
114.52 Кб
Скачать

Практическая работа №1

Шифр Цезаря

Ход работы

Вариант 10.

1)

2)

3)

Самостоятельная работа

1. Написать консольное приложение, реализующее шифр Цезаря.

Листинг 1:

using System;

using System.Collections.Generic;

using System.Linq;

namespace цезарь {

class Program {

static void Main(string[] args) {

ShowShifr();

ShowDecryption();

Console.ReadKey();

}

static void ShowShifr() {

Console.Write("Введите ключ шифрования: ");

int key = int.Parse(Console.ReadLine());

Shifr shifr = new Shifr(key);

Console.Write("Введите слово для шифрования: ");

string srt = Console.ReadLine();

Console.Write("Шифр: ");

string _str = shifr.GetShifr(srt);

Console.WriteLine(_str);

}

static void ShowDecryption() {

Console.Write("Введите ключ дешифрования: ");

int key = int.Parse(Console.ReadLine());

Shifr shifr = new Shifr(key);

Console.Write("Введите слово для дешифрования: ");

string srt = Console.ReadLine();

Console.Write("Зашифрованное слово: ");

string _str = shifr.GetDecryption(srt);

Console.WriteLine(_str);

}

}

public class Shifr {

public List<char> Alphabit;

public int Key;

public Shifr(int key = 0) {

Alphabit = new List<char>() {

'а','б','в','г', 'д', 'е', 'ж', 'з', 'и', 'й',

'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф',

'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я'

};

Key = key;

}

public string GetShifr(string str) {

string shifr = "";

int n = str.Length;

for (int i = 0; i < n; i++) {

int index = Alphabit.FindIndex(0, (ch) => ch == str[i]);

shifr += Alphabit[(index + Key) % 32];

}

return shifr;

}

public string GetDecryption(string shifr) {

string str = "";

int n = shifr.Length;

for (int i = 0; i < n; i++) {

int index = Alphabit.FindIndex(0, (ch) => ch == shifr[i]);

str += Alphabit[(index + (32 - Key)) % 32];

}

return str;

}

}

}

2. Используя шифр Атбаш зашифровать/дешифровать фразы, согласно варианту 10.

Листинг 2:

using System;

using System.Collections.Generic;

using System.Linq;

namespace Атбаш {

class Program {

static void Main(string[] args) {

ShowShifr();

ShowDecryption();

Console.ReadLine();

}

static void ShowShifr() {

ShifrAtbashi shifr = new ShifrAtbashi();

Console.Write("Введите слово для шифрования: ");

string srt = Console.ReadLine();

Console.Write("Шифр: ");

string _str = shifr.GetShifr(srt);

Console.WriteLine(_str);

}

static void ShowDecryption() {

ShifrAtbashi shifr = new ShifrAtbashi();

Console.Write("Введите слово для дешифрования: ");

string srt = Console.ReadLine();

Console.Write("Зашифрованное слово: ");

string _str = shifr.GetDecryption(srt);

Console.WriteLine(_str);

}

}

public class ShifrAtbashi {

public List<char> Alphabit = new List<char>() {

'а','б','в','г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й',

'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф',

'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я'

};

public string GetShifr(string str) {

string shifr = "";

int countStr = str.Length;

int countAlphabit = Alphabit.Count();

for (int i = 0; i < countStr; i++) {

int index = Alphabit.FindIndex(0, (ch) => ch == str[i]);

shifr += Alphabit[countAlphabit - index - 1];

}

return shifr;

}

public string GetDecryption(string shifr) => GetShifr(shifr);

}

}

3. Используя шифр Гронсфельда зашифровать/дешифровать, согласно варианту 10.

Листинг 3:

using System;

using System.Collections.Generic;

using System.Linq;

namespace Гронсфельд {

class Program {

static void Main(string[] args) {

ShowShifr();

ShowDecryption();

Console.ReadLine();

}

static void ShowShifr() {

Console.Write("Введите ключ шифрования: ");

string key = Console.ReadLine();

Shifr shifr = new Shifr(key);

Console.Write("Введите слово для шифрования: ");

string srt = Console.ReadLine();

Console.Write("Шифр: ");

string _str = shifr.GetShifr(srt);

Console.WriteLine(_str);

}

static void ShowDecryption() {

Console.Write("Введите ключ дешифрования: ");

string key = Console.ReadLine();

Shifr shifr = new Shifr(key);

Console.Write("Введите слово для дешифрования: ");

string srt = Console.ReadLine();

Console.Write("Зашифрованное слово: ");

string _str = shifr.GetDecryption(srt);

Console.WriteLine(_str);

}

}

public class Shifr {

public List<char> Alphabit = new List<char>() {

'а','б','в','г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й',

'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф',

'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я'

};

public string Key;

public Shifr(string key = "0") {

Key = key;

}

public string GetShifr(string str) {

string shifr = "";

int n = str.Length;

int countAlphabit = Alphabit.Count();

if (n != Key.Length) {

Console.WriteLine("Неверный ключ");

return null;

}

for (int i = 0; i < n; i++) {

int index = Alphabit.FindIndex(0, (ch) => ch == str[i]);

int key = int.Parse(Key[i].ToString());

if (index + key > countAlphabit - 1) {

int _key = (index + key) - countAlphabit;

shifr += Alphabit[_key];

}

else {

shifr += Alphabit[index + key];

}

}

return shifr;

}

public string GetDecryption(string shifr) {

string str = "";

int n = shifr.Length;

int countAlphabit = Alphabit.Count();

if (n != Key.Length) {

Console.WriteLine("Неверный ключ");

return null;

}

for (int i = 0; i < n; i++) {

int index = Alphabit.FindIndex(0, (ch) => ch == shifr[i]);

int key = int.Parse(Key[i].ToString());

if (index - key < 0) {

int _key = countAlphabit + (index - key);

str += Alphabit[_key];

}

else {

str += Alphabit[index - key];

}

}

return str;

}

}

}

Ответы на контрольные вопросы:

  1. Какой текст называется открытым? Какой текст называется закрытым?

Открытый ключ – это ключ, известный всем пользователям. Закрытый ключ — ключ. Известен только отправителю сообщения.

2. Как осуществляется процесс шифрования в методе Цезаря?

При шифровании каждый символ заменяется другим, отстоящим от него в алфавите на фиксированное число позиций.

Yi = (xi + k) mod 32;

Xi = (yi + (32 – k)) mod 32

3. Что такое «шифрование методом перестановки»?

Перестанавливает символы исходного открытого текст используя некоторый алгоритм.

4. Как работает функция ОСТАТ? Что делает функция ВПР?

ОСТАТ – возвращает остаток от деления. ВПР – позволит найти и упорядочить данные в таблице или диапазоне строк.

5. Как организуется шифрование методом замены?

Каждый символу алфавита ставит в соответствие с некоторым символ этого или другого алфавита и получает шифр путем подмены символов.

6. За счет чего получается стойкое шифрование методом замены?

Стойкость метода – это тот минимальный объем зашифрованного текста, статистическим анализом которого можно вскрыть исходный текст. Таким образом стойкость шифра определяет допустимый объем информации, зашифровываемый при использовании одного ключа.

Стойкое шифрование методом замены получается за счет алфавита.

7.      Как существуют методы усложнения шифрования методами замены?

Использование нескольких алфавитов, использование одного алфавита многократно циклически.

8.      Какие существуют достоинства и недостатки шифрования методами замены?

Достоинства:

  • Гораздо быстрее асимметричных систем

  • При использовании длинного ключа сложно взломать

Недостатки:

  • Требует безопасного механизма передачи ключей

  • Каждой паре пользователей нужен уникальный ключ; по мере увеличении количества пользователей, возрастающее число ключей может сделать управление ими просто нереальной задачей

  • Обеспечивает конфиденциальность, но не обеспечивает аутентификацию или неотказуемость.

Соседние файлы в папке Практическая работа 1