Шифр цезаря с ключевым словом - C# (190264)
Формулировка задачи:
Здравствуйте. Мне необходимо реализовать программу дешифровки цезаря с ключевым словом. Я использую метод частотного анализа, и проверки правильности декодирования по словарю. Но остается вопрос - в разных текстах частота различна, и из-за этого получается неточность декодирования. Как произвести вторичное декодирования для неудачно декодированных слов, и как их можно отличить от имен собственных?
Решение задачи: «Шифр цезаря с ключевым словом»
textual
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace CaesarWithKnife
- {
- class Caesar
- {
- private static string alpha = "abcdefghijklmnopqrstuvwxyz";
- private static char[] newAlpha = new char[26];
- public static string encrypt(string Message)
- {
- string res = "";
- foreach (char ch in Message)
- {
- for (int i = 0; i < alpha.Length; i++)
- {
- if (ch == alpha[i])
- {
- res += newAlpha[i];
- break;
- }
- }
- }
- return res;
- }
- public static string decrypt(string Message)
- {
- string res = "";
- foreach (char ch in Message)
- {
- for (int i = 0; i < newAlpha.Length; i++)
- {
- if (ch == newAlpha[i])
- {
- res += alpha[i];
- break;
- }
- }
- }
- return res;
- }
- public static void createNewAlpha(string keyWord, int key) // создаёт новый алфавит с помощью ключа
- {
- bool findSame = false;
- key--;
- int beg = 0, current = key;
- // добавить ключевое слово в новый алфавит
- for (int i = key; i < keyWord.Length + key; i++)
- {
- for (int j = key; j < keyWord.Length + key; j++)
- {
- if (keyWord[i - key] == newAlpha[j])
- {
- findSame = true;
- break;
- }
- }
- if (!findSame)// если повторений нету, то буква добавляется в новый алфавит
- {
- newAlpha[current] = keyWord[i - key];
- current++;
- }
- findSame = false;
- }
- // добавить буквы после ключевого слова
- for (int i = 0; i < alpha.Length; i++)
- {
- for (int j = 0; j < newAlpha.Length; j++)
- {
- if (alpha[i] == newAlpha[j])
- {
- findSame = true;
- break;
- }
- }
- if (!findSame)
- {
- newAlpha[current] = alpha[i];
- current++;
- }
- findSame = false;
- if (current == newAlpha.Length)
- {
- beg = i;
- break;
- }
- }
- // добавить буквы после ключевого слова
- current = 0;
- for (int i = beg; i < alpha.Length; i++)
- {
- for (int j = 0; j < newAlpha.Length; j++)
- {
- if (alpha[i] == newAlpha[j])
- {
- findSame = true;
- break;
- }
- }
- if (!findSame)
- {
- newAlpha[current] = alpha[i];
- current++;
- }
- findSame = false;
- }
- }
- public static string getNewAlpha()
- {
- string strNewAlpha = new string(newAlpha);
- return strNewAlpha;
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д