Шифр цезаря с ключевым словом - C# (190264)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Мне необходимо реализовать программу дешифровки цезаря с ключевым словом. Я использую метод частотного анализа, и проверки правильности декодирования по словарю. Но остается вопрос - в разных текстах частота различна, и из-за этого получается неточность декодирования. Как произвести вторичное декодирования для неудачно декодированных слов, и как их можно отличить от имен собственных?

Решение задачи: «Шифр цезаря с ключевым словом»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace CaesarWithKnife
  8. {
  9.     class Caesar
  10.     {
  11.         private static string alpha = "abcdefghijklmnopqrstuvwxyz";
  12.         private static char[] newAlpha = new char[26];
  13.  
  14.         public static string encrypt(string Message)
  15.         {
  16.             string res = "";
  17.             foreach (char ch in Message)
  18.             {
  19.                 for (int i = 0; i < alpha.Length; i++)
  20.                 {
  21.                     if (ch == alpha[i])
  22.                     {
  23.                         res += newAlpha[i];
  24.                         break;
  25.                     }
  26.                 }
  27.             }
  28.             return res;
  29.         }
  30.  
  31.         public static string decrypt(string Message)
  32.         {
  33.             string res = "";
  34.             foreach (char ch in Message)
  35.             {
  36.                 for (int i = 0; i < newAlpha.Length; i++)
  37.                 {
  38.                     if (ch == newAlpha[i])
  39.                     {
  40.                         res += alpha[i];
  41.                         break;
  42.                     }
  43.                 }
  44.             }
  45.             return res;
  46.         }
  47.  
  48.         public static void createNewAlpha(string keyWord, int key) // создаёт новый алфавит с помощью ключа
  49.         {
  50.             bool findSame = false;
  51.             key--;
  52.             int beg = 0, current = key;
  53.             // добавить ключевое слово в новый алфавит
  54.             for (int i = key; i < keyWord.Length + key; i++)
  55.             {
  56.                 for (int j = key; j < keyWord.Length + key; j++)
  57.                 {
  58.                     if (keyWord[i - key] == newAlpha[j])
  59.                     {
  60.                         findSame = true;
  61.                         break;
  62.                     }
  63.                 }
  64.                 if (!findSame)// если повторений нету, то буква добавляется в новый алфавит
  65.                 {
  66.                     newAlpha[current] = keyWord[i - key];
  67.                     current++;
  68.                 }
  69.                 findSame = false;
  70.             }
  71.  
  72.             // добавить буквы после ключевого слова
  73.             for (int i = 0; i < alpha.Length; i++)
  74.             {
  75.                 for (int j = 0; j < newAlpha.Length; j++)
  76.                 {
  77.                     if (alpha[i] == newAlpha[j])
  78.                     {
  79.                         findSame = true;
  80.                         break;
  81.                     }
  82.                 }
  83.                 if (!findSame)
  84.                 {
  85.                     newAlpha[current] = alpha[i];
  86.                     current++;
  87.                 }
  88.                 findSame = false;
  89.                 if (current == newAlpha.Length)
  90.                 {
  91.                     beg = i;
  92.                     break;
  93.                 }
  94.             }
  95.  
  96.             // добавить буквы после ключевого слова
  97.             current = 0;
  98.             for (int i = beg; i < alpha.Length; i++)
  99.             {
  100.                 for (int j = 0; j < newAlpha.Length; j++)
  101.                 {
  102.                     if (alpha[i] == newAlpha[j])
  103.                     {
  104.                         findSame = true;
  105.                         break;
  106.                     }
  107.                 }
  108.                 if (!findSame)
  109.                 {
  110.                     newAlpha[current] = alpha[i];
  111.                     current++;
  112.                 }
  113.                 findSame = false;
  114.             }
  115.         }
  116.  
  117.         public static string getNewAlpha()
  118.         {
  119.             string strNewAlpha = new string(newAlpha);
  120.             return strNewAlpha;
  121.         }
  122.     }
  123. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут