Выполнение программной реализации шифрования данных (Строчные буквы русского алфавита, спецсимвол (@) и цифры) с помощью шифра Виженера

Страницы работы

Содержание работы

Министерство образования и науки, молодежи и спорта Украины

Сумской государственный университет

Кафедра компьютерных наук

Отчет по практической работе №2

по теме:” Шифры сложной замены. Шифр Виженера ”

по дисциплине ”Криптология”

Выполнил: студент

Факультету ЕлИТ

Группы ИН-83

Третяк А. А.

Проверил: Дунь А. В.

Сумы 2011


Задание.

1. Ознакомиться с алгоритмом работы шифра Виженера

2. Выполнить программную реализацию шифрования данных с помощью шифра Виженера, согласно своему варианту.

3. Протестировать работу программы.

4. Оформить отчёт.

Ход работы

1. Ознакомиться с алгоритмом работы шифра Виженера

2. Выполнить программную реализацию шифрования данных с помощью шифра Виженера, согласно своему варианту.

в-та

А1

Тип шифрования

17    

Строчные буквы русского алфавита, цифры и спецсимвол (@)

С помощью формулы

Код программы:

using System;

using System.Collections.Generic;

using System.Text;

namespace Cripto.CodeAlgorithm

{

  class Vyzhener : Code

  {

    String key;

    String alphabet;

    Dictionary<char, int> dict;

    public Vyzhener(String key, String alphabet)

    {

      this.key = key;

      this.alphabet = alphabet;

      dict = new Dictionary<char, int>();

      String[] result = new String[2];

      for (int i = 0; i < alphabet.Length; i++)

      {

        dict.Add(alphabet[i], i);

        result[0] += alphabet[i].ToString().PadLeft(3);

        result[1] += i.ToString().PadLeft(3);

        if (result[0].Length > 75)

        {

          for (int j = 0; j < result.Length; j++)

          {

            Console.WriteLine(result[j]);

            result[j] = "";

          }

        }

      }

      for (int i = 0; i < result.Length; i++)

      {

        Console.WriteLine(result[i]);

      }

    }

    public String Code(String message)

    {

      String[] result = new String[6];

      StringBuilder code = new StringBuilder();

      for (int i = 0; i < message.Length; i++)

      {

        if (!dict.ContainsKey(message[i])) throw new Exception("Unknown char " + message[i] + ".");

        code.Append(alphabet[ (dict[message[i]] + dict[key[i % key.Length]]) % alphabet.Length]);

        result[0] += message[i].ToString().PadLeft(3);

        result[1] += dict[message[i]].ToString().PadLeft(3);

        result[2] += key[i % key.Length].ToString().PadLeft(3);

        result[3] += dict[key[i % key.Length]].ToString().PadLeft(3);

        result[4] += ((dict[message[i]] + dict[key[i % key.Length]]) % alphabet.Length).ToString().PadLeft(3);

        result[5] += alphabet[(dict[message[i]] + dict[key[i % key.Length]]) % alphabet.Length].ToString().PadLeft(3);

      }

      for (int i = 0; i < result.Length; i++)

      {

        Console.WriteLine(result[i]);

      }

      return code.ToString();

    }

    public String Decode(String message)

    {

      String[] result = new String[6];

      StringBuilder decode = new StringBuilder();

      for (int i = 0; i < message.Length; i++)

      {

        if (!dict.ContainsKey(message[i])) throw new Exception("Unknown char " + message[i] + ".");

        decode.Append(alphabet[ (dict[message[i]] - dict[key[i % key.Length]] + alphabet.Length) % alphabet.Length]);

        result[0] += message[i].ToString().PadLeft(3);

        result[1] += dict[message[i]].ToString().PadLeft(3);

        result[2] += key[i % key.Length].ToString().PadLeft(3);

        result[3] += dict[key[i % key.Length]].ToString().PadLeft(3);

        result[4] += ((dict[message[i]] - dict[key[i % key.Length]] + alphabet.Length) % alphabet.Length).ToString().PadLeft(3);

        result[5] += alphabet[(dict[message[i]] - dict[key[i % key.Length]] + alphabet.Length) % alphabet.Length].ToString().PadLeft(3);

      }

      for (int i = 0; i < result.Length; i++)

      {

        Console.WriteLine(result[i]);

      }

      return decode.ToString();

    }

  }

}

using System;

using System.Collections.Generic;

using System.Text;

using System.IO;

using Cripto.CodeAlgorithm;

using Cripto.CriptoAnalyze;

namespace Cripto

{

  class Program

  {

    static void Main(string[] args)

    {

      String alphabet = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЪЬЭЮЯ0123456789@ ";

      Console.Write("Введите ключь: ");

      String key = Console.ReadLine();

      Code vyzhener = new Vyzhener(key, alphabet);

      CodeTest(vyzhener);

    }

    static void CodeTest(Code code)

    {

      Console.Write("Введите сообщение: ");

      String message = Console.ReadLine();

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

      String coded = code.Code(message);

      Console.WriteLine("Расшифрование: ");

      code.Decode(coded);

    }

  }

}

3. Протестировать работу программы.

Результат работы программы:

Вывод: в ходе выполнения этой практической работы, я усовершенствовал свои навыки шифрования и дешифрования сообщений шифром Виженера.

Похожие материалы

Информация о работе

Предмет:
Криптология
Тип:
Отчеты по лабораторным работам
Размер файла:
82 Kb
Скачали:
0