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