Шифрование и дешифрование шифром Петра 1 - C#
Формулировка задачи:
Требуется шифровать и дешифровать шифром Петра 1 текст. Шифр Петра 1 - это простая подстановка (смотрите во вложении) Зашифровать у меня получилось, а вот с расшифровка ввела меня в тупик. Подкиньте идеи новичку.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Petr { class Program { static void Main(string[] args) { Console.WriteLine("Шифр Петра 1\n"); string s = ""; //Исходный текст Console.WriteLine("Введите текст: "); s = Console.ReadLine(); Console.WriteLine("Исходный текст: " + s); string result = ""; //Результат шифровки for (int i = 0; i < s.Length; i++) // Шифровка { if (s[i] == 'а') { char temp = s[i]; temp = s[i]; string tmp = Convert.ToString(temp); tmp = "ме"; result += tmp; } if (s[i] == 'б') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "ли"; result += tmp; } if (s[i] == 'в') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "ко"; result += tmp; } if (s[i] == 'г') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "ин"; result += tmp; } if (s[i] == 'д') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "зе"; result += tmp; } if (s[i] == 'е') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "жу"; result += tmp; } if (s[i] == 'ж') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "ню"; result += tmp; } if (s[i] == 'з') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "о"; result += tmp; } if (s[i] == 'и') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "пы"; result += tmp; } if (s[i] == 'к') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "ра"; result += tmp; } if (s[i] == 'л') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "су"; result += tmp; } if (s[i] == 'м') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "ти"; result += tmp; } if (s[i] == 'н') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "у"; result += tmp; } if (s[i] == 'о') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "хи"; result += tmp; } if (s[i] == 'п') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "от"; result += tmp; } if (s[i] == 'р') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "ца"; result += tmp; } if (s[i] == 'с') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "чу"; result += tmp; } if (s[i] == 'т') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "ше"; result += tmp; } if (s[i] == 'у') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "ам"; result += tmp; } if (s[i] == 'ф') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "з"; result += tmp; } if (s[i] == 'х') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "ъ"; result += tmp; } if (s[i] == 'ц') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "ь"; result += tmp; } if (s[i] == 'ч') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "б"; result += tmp; } if (s[i] == 'ш') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "ю"; result += tmp; } if (s[i] == 'щ') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "я"; result += tmp; } if (s[i] == 'ъ') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "ф"; result += tmp; } if (s[i] == 'ы') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "а"; result += tmp; } if (s[i] == 'ь') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "бе"; result += tmp; } if (s[i] == 'э') { char temp = s[i]; temp = s[i]; string tmp = Convert.ToString(temp); tmp = "ва"; result += tmp; } if (s[i] == 'ю') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "гу"; result += tmp; } if (s[i] == 'я') { char temp = s[i]; string tmp = Convert.ToString(temp); tmp = "ди"; result += tmp; } } Console.WriteLine("Зашифрованный текст: \n" + result); Console.ReadKey(); string result2 = ""; //Резуьтат дешифровки for (int i = 0; i < result.Length; i++) // Дешифровка { if (result[i] == 'м') { if (result[i + 1] == 'е') { char temp2 = result[i + 1]; string tmp2 = Convert.ToString(temp2); tmp2 = "а"; result2 += tmp2; } else if (result[i - 1] == 'а') { char temp2 = result[i + 1]; string tmp2 = Convert.ToString(temp2); tmp2 = "у"; result2 += tmp2; } } } Console.WriteLine("Расшифрованный: " + result2); Console.ReadKey(); } } }
Решение задачи: «Шифрование и дешифрование шифром Петра 1»
textual
Листинг программы
class Program { public static void Main(string[] args) { PetrCipher petr = new PetrCipher(); string str = "абвзф"; string encode = petr.Encode(str); Console.WriteLine(encode); string decode = petr.Decode(encode); Console.WriteLine(decode); } } class PetrCipher { private readonly Dictionary<char, string> _encodeTable = new Dictionary<char, string>(); private readonly Dictionary<string, char> _decodeTable; public PetrCipher() { _encodeTable.Add('а', "ме"); _encodeTable.Add('б', "ли"); _encodeTable.Add('в', "ко"); _encodeTable.Add('з', "о"); _encodeTable.Add('ф', "з"); // Меняем ключ значение для таблицы расшифровки _decodeTable = _encodeTable.ToDictionary(kv => kv.Value, kv => kv.Key); } public string Encode(string input) { StringBuilder output = new StringBuilder(); foreach (var c in input) { output.Append(_encodeTable[c]); } return output.ToString(); } public string Decode(string input) { StringBuilder output = new StringBuilder(); StringBuilder temp = new StringBuilder(); foreach (var s in input) { temp.Append(s); if (_decodeTable.ContainsKey(temp.ToString())) { output.Append(_decodeTable[temp.ToString()]); temp.Clear(); } } return output.ToString(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д