Шифрование и дешифрование шифром Петра 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();
        }
    }

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


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

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

11   голосов , оценка 4.455 из 5
Похожие ответы