Ознакомление с алгоритмом работы и алгоритмом криптоанализа шифра Цезаря. Выполнение программной реализации на любом языке программирования

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

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

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

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

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

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

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

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

по теме:” Шифры простой замены. Шифр Цезаря ”

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

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

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

Группы ИН-83

Третяк А. А.

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

Сумы 2011


Задание.

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

2.  Ознакомиться с алгоритмом криптоанализа шифра Цезаря.

3.  Выполнить программную реализацию на любом языке программирования

а.  шифрования данных с помощью шифра Цезаря, а также

б.   криптоанализ шифра Цезаря, согласно своему варианту.

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

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

Ход работы

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

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

Если сопоставить каждому символу алфавита его порядковый номер (нумеруя с 0), то зашифрование  выражается формулой :

а расшифрование выражается формулой:

где  — номер в алфавите -го символа открытого текста,

 — номер в алфавите -го символа шифрованного текста,

 — мощность алфавита, 

 — ключ ,

  - длина открытого/зашифрованного текста

2.  Ознакомиться с алгоритмом криптоанализа шифра Цезаря.

Для криптоанализа шифра Цезаря необходимо:

a.  Определить частоты символов алфавита. Занести их в массив .

b.  Определить частоты символов шифртекста. Занести их в массив :

c.   Найти такое значение при котором сумма одноименных разностей d  была бы минимальной.

o  Вычислить для всех значений  суммы разностей

где ,   – мощность алфавита.

o  Найти значение , при котором сумма разностей d будет минимальной.

d.  Расшифровать шифртекст с ключом  .

3.  Выполнить программную реализацию на любом языке программирования.

а.  Шифрование и расшифрование данных с помощью шифра Цезаря.

Код программы для шифрования и расцифрования:

using System;

using System.Collections.Generic;

using System.Text;

using System.IO;

namespace Cripto.CodeAlgorithm

{

  class Caesar : Code

  {

    int key;

    String alphabet;

    Dictionary<char, int> dict;

    public Caesar(int key, String alphabet)

    {

      this.key = key;

      this.alphabet = alphabet;

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

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

      {

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

      }

    }

    public String Code(String message)

    {

      StringBuilder coded = new StringBuilder();

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

      {

        if (!dict.ContainsKey(message[i]))

          throw new Exception("Неизвестный символ '"+message[i]+"', номер в строке:" + i + ".");

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

      }

      return coded.ToString();

    }

    public String Decode(String coded)

    {

      StringBuilder message = new StringBuilder();

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

      {

        if (!dict.ContainsKey(coded[i]))

          throw new Exception("Неизвестный символ '" + coded[i] + "', номер в строке:" + i + ".");

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

      }

      return message.ToString();

    }

    public void PrintInfo(TextWriter outputStream)

    {

      outputStream.WriteLine("Алфавит: " + alphabet);

      outputStream.WriteLine("Мощность алфавита: " + alphabet.Length);

    }

  }

}

б.   криптоанализ шифра Цезаря.

Код программы  для криптоанализа:

using System;

using System.Collections.Generic;

using System.Text;

using Cripto.CodeAlgorithm;

namespace Cripto.CriptoAnalyze

{

  class CaesarAnalizer

  {

    private String alphabet;

    private Dictionary<char, int> dict;

    public CaesarAnalizer(String alphabet)

    {

      this.alphabet = alphabet;

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

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

      {

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

      }

    }

    public String StaticDecriptor(double[] probability, String coded)

    {

      double[] countProb = new double[alphabet.Length];

      foreach (char c in coded) countProb[dict[c]]++;

      foreach (char c in coded) countProb[dict[c]] /= coded.Length;

      int key = -1;

      double minPDif = Double.MaxValue;

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

      {

        double kp = 0;

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

        {

          kp += Math.Abs(probability[i] - countProb[(i + k) % alphabet.Length]);

        }

        if (kp < minPDif)

        {

          minPDif = kp;

          key = k;

        }

      }

      Console.WriteLine("Ключь = " + key);

      Caesar caesar = new Caesar(key, alphabet);

      return caesar.Decode(coded);

    }

  }

}

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

Код программы для тестирования:

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 alphabet1 = "0123456789+АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЪЬЭЮЯ ";

      String alphabet2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ ";

      Caesar caesar = new Caesar(17, alphabet1);

      caesar.PrintInfo(Console.Out);

      CodeTest(caesar);

      caesar = new Caesar(17, alphabet2);

      caesar.PrintInfo(Console.Out);

      Console.WriteLine("Криптоанализ шифра Цезаря");

      StreamReader sr = new StreamReader("input.txt");

      String coded = caesar.Code(sr.ReadToEnd());

      Console.WriteLine("Зашифрованый : " + coded);

      CaesarAnalizer ka = new CaesarAnalizer(alphabet2);

      double[] p = { 0.079, 0.017, 0.041, 0.033, 0.122, 0.022, 0.018, 0.038, 0.075,

              0.001, 0.008, 0.037, 0.027, 0.068, 0.071, 0.028, 0.002, 0.069,

              0.071, 0.091, 0.031, 0.011, 0.013, 0.003, 0.020, 0.002, 0.222 };

      Console.WriteLine("Расцифрованый: " + ka.StaticDecriptor(p, coded));

    }

    static void CodeTest(Code code)

    {

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

      String coded = code.Code(Console.ReadLine());

      Console.WriteLine("Зашифрованый : " + coded);

      Console.WriteLine("Расцифрованый: " + code.Decode(coded));

    }

  }

}

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

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

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

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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

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

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.