«Шифр Цезаря (Код Цезаря) - пример на С# » Visual Studio

Если интересуют "Атака", "Взлом" - то ищите здесь «Шифрование, Кодирование и/или Сжатие Информации»

  1. Данные на входе и интерфейс программы на C# Visual Studio
  2. Перебор символов строки в цикле
  3. Тестирование готового приложения Шифр Цезаря
  4. Классы, упрощающие решение задачи

Задание:

Разработать программу, кодирующую входную строку методом моноалфавитной подстановки, используя «шифр Цезаря». Программа должна поддерживать ввод широких символов (UNICODE).

Допустимые символы – ВСЕ!!! т.е. все символы английского (латинского) и русского алфавитов, цифры и другие знаки вводимые с клавиатуры

Данные на входе и интерфейс программы на C# Visual Studio

Программа должна закодировать входную строку методом моноалфавитной подстановки, используя шифр Цезаря. К цифровому коду каждой буквы (или другого символа) прибавить заданное пользователем значение key (ключ). Если получившийся код выходит за пределы указанных наборов символов, то считать, что за последним символом набора снова следует первый (цикл по кольцу). Вывод результата кодирования-декодирования представить на этой же форме.

video
Возможности калькулятора по шифрованию и дешифрованию
видео смотреть/скачать


Если не удалось запустить видео, воспользуйтесь этой ссылкой ... видео на VK.com



программа Шифр Код Цезаря на С# почти бесплатно
Рис.1        Данные на входе и интерфейс программы Шифр Код Цезаря на С#





Перебор символов строки в цикле


       for(int i=0;i<m.Length;i++)
       {
              foreach (Clent v in this)
              {
                     tmp = v.Repl(m.Substring(i, 1), key);
                     if (tmp != "") //нужная лента найдена, замена символу определена
                     {
                            res += tmp;
                            break; // прерывается foreach (перебор лент)
                     }
              }

              if (tmp == "") res += m.Substring(i, 1); //незнакомый символ оставляю без изменений
       }




Тестирование готового приложения Шифр Цезаря



Решение:

Код очень короткий:

файл Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CezarCS
{
    public partial class Form1 : Form
    {
       Cezar Me = new Cezar();

       public Form1()
       {
       InitializeComponent();
       }

       private void button1_Click(object sender, EventArgs e)
       {
       textBox2.Text = Me.Codeс(textBox1.Text, (int)numericUpDown1.Value);
       }

       private void button2_Click(object sender, EventArgs e)
       {
       textBox3.Text = Me.Codeс(textBox2.Text, -(int)numericUpDown1.Value);
       }
    }
}

Тестирование - это наиболее важный этап в жизненном цикле программного продукта. Поэтому не верьте картинкам, фильмам и сказкам…

Только личное тестирование во всех наиболее сложных сочетаниях данных - должно убедить Вас в доброкачественности алгоритма и исходного кода!

скачать ехе-файл для тестирования







Классы, упрощающие решение задачи

Всего два класса: Clent - лента Цезаря и собственно Cezar, обеспечивающий своим методом Codeс и кодирование, и декодирование…

Почему я назвал первый класс "лентой"? У лент в нашей обычной жизни нет проблем с длиной... Какой длины лента нужна, такой и отстригай от большого мотка… И вторая особенность лент: ее легко закольцевать, т.е. соединить (сшить, склеить) два ее конца.
Посмотрите на конструктор… он принимает строку любой длины…
Метод Repl(замена) по параметрам "символ"(m) и "смещение"(key) вернет новый символ в закольцованной ленте.


class Clent
{
    string le;

    public Clent(string m)
    {
       le = m;
    }

    public string Repl(string m, int key) //замена символа m на символ со смещением
    {
       int pos=le.IndexOf(m);
       if (pos == -1) return ""; //символ в этой ленте не найден
       pos = (pos+key) % le.Length; //если смещение больше одного круга
       if (pos < 0) pos += le.Length;
       return le.Substring(pos, 1);
    }
}

class Cezar : System.Collections.Generic.List<Clent>
{
    public Cezar()
    { //в конструкторе формирую коллекцию лент
       this.Add(new Clent("abcdefghijklmnopqrstuvwxyz"));
       this.Add(new Clent("ABCDEFGHIJKLMNOPQRSTUVWXYZ"));
       this.Add(new Clent("абвгдеёжзийклмнопрстуфхцчшщъыьэюя"));
       this.Add(new Clent("АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"));
       this.Add(new Clent("0123456789"));
       this.Add(new Clent("!\"#$%^&*()+=-_'?.,|/`~№:;@[]{}"));
    }

    public string Codeс(string m, int key) //кодирование и декодирование в зависимости от знака ключа
    {
       string res="", tmp="";
       for(int i=0;i<m.Length;i++)
       {
       foreach (Clent v in this)
       {
       tmp = v.Repl(m.Substring(i, 1), key);
       if (tmp != "") //нужная лента найдена, замена символу определена
       {
       res += tmp;
       break; // прерывается foreach (перебор лент)
       }
       }
       if (tmp == "") res += m.Substring(i, 1); //незнакомый символ оставляю без изменений
       }
       return res;
    }
}

Как видим, если символ принадлежит набору ленты, то возвращается новый символ этого набора в зависимости от величины смещения (отрицательного или положительного – не важно). Набор как бы закольцован (за пределы набора выйти нельзя). Функция возвращает пустую строку если символ не принадлежит набору.

Использование классов показано в программе…

Другие примеры на языке «C#»

Другие примеры на тему «Шифрование, Кодирование и/или Сжатие Информации» на разных языках программирования…





Если у Вас остались вопросы, то задать их Вы можете, нажав на эту кнопочку ...


Поделиться в соц сетях:



Если на этой странице не нашлось того, что Вы так искали...

         Не расстраивайтесь, не все потеряно... Смело щелкайте...
исходный код на заказ. orenstudent.ru Автоматизация документов MS Office. orenstudent.ru исходный код на заказ. orenstudent.ru Помогите найти и устранить ошибку в исходном коде программы. orenstudent.ru Skype-консультирование по программированию
Скайп-консультации

Акция !!!
исходный код комментарии цена минимальная


Не попадайтесь на удочку мошенников-кидал...
Сайт помощи студентам по программированию и информатике

Program code