Шифр цезаря c windows forms

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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 ziks
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
 
            textBox3.Text = "";
            int move = 0;
            string[] array = new string[] { "а", "б", "в",
 "г", "д", "е", "ё", "ж",
"з", "и", "й", "к", "л", "м", "н", "о", "п", "р", "с",
"т", "у", "ф", "х",
 "ц", "ч", "ш", "щ", "ъ", "ы", "ь", "э", "ю", "я" };
            try
            {
                move = Convert.ToInt32(textBox1.Text);
            }
            catch
            {
                MessageBox.Show("Установите шаг шифрования!");
                return;
            }
 
            string[] array2;
            array2 = array.Skip(move).Concat(array.Take(move)).ToArray();
 
            foreach (string element in array2)
            {
 
            }
 
            string text = textBox2.Text;
            foreach (char bykva in text)
            {
                for (int i = 0; i < array.Length; i++)
                {
                    if (bykva.ToString().ToLower() == array[i])
                    {
                        textBox3.Text += array2[i];
                        break;
                    }
                    else
                    {
                        if (bykva.ToString() == " " || bykva.ToString() == "." ||
                        bykva.ToString() == "," || bykva.ToString() == ":" ||
                        bykva.ToString() == ";" || bykva.ToString() == "?" ||
                        bykva.ToString() == "!") 
                        {
                            textBox3.Text += " ";
                            break;
                        }
                    }
                }
            }
        }
    }
}

Skip to content



Navigation Menu

Sign in

Provide feedback

We read every piece of feedback, and take your input very seriously.

Include my email address so I can be contacted

Saved searches

Use saved searches to filter your results more quickly

Sign in

Sign up

iChuy

/

CSharpCipher

Public

  • Notifications
    You must be signed in to change notification settings

  • Fork
    1


  • Star
    0

A windows forms mini app for encriping and decripting messages using the Caesar Cipher.

0
stars

1
fork

Branches

Tags

Activity


Star

Notifications
You must be signed in to change notification settings

BranchesTags

Folders and files

Name Name

Last commit message

Last commit date

Latest commit

History

3 Commits

CaesarCipher

CaesarCipher

.gitignore

.gitignore

CaesarCipher.sln

CaesarCipher.sln

README.md

README.md

Repository files navigation

CSharpCipher

N|CSharpCipher

A windows forms mini app for encriping and decripting messages using the Caesar Cipher.

  • Encrypt text
  • Decrypt Text

Plugins

CSharpCipher is currently extended with the following plugins. Instructions on how to use them in your own application are linked below.

Plugin README
Material Skin MaterialSkin for .NET WinForms

Todos

  • Save to text file

License

MIT

Free Software, Hell Yeah!

About

A windows forms mini app for encriping and decripting messages using the Caesar Cipher.

Topics

csharp

cipher

dotnet

material-ui

caesar-cipher

caesarcipher-net

Resources

Readme

Activity

Stars

0
stars

Watchers

1
watching

Forks

1
fork

Report repository

Releases

No releases published

Packages

No packages published

Languages

  • C#
    100.0%

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

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

Задание:

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

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

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

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

Если не удалось запустить видео, воспользуйтесь этой ссылкой … видео на 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#»

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

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

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

         Не расстраивайтесь, не все потеряно… Смело щелкайте…

  • Subject:
    C# Tutorials
  • Learning Time: 1.5 hours

Welcome to this tutorial for creating an encryption app in C#. We will be using Microsoft Visual Studio 2010 and C# language. This is a windows form application so we can use buttons, labels and text boxes.

We are going to recreate an ancient encryption technology in our program, the technology is called Caesar Cipher its been used by the Great Julius Caesar of Rome who used to hide or encrypt his messages so when the messenger is caught in battle no one but himself can read those messages thus his victory was assured or so it was presumed then.

Here is a video done by the Khan Academy explaining the Caesar Cipher in excellent detail.  Check it out –  https://www.youtube.com/watch?v=sMOZf4GN3oc

Full code for the program is on page 2

Lesson Objectives

  1. Create a simple windows form application in C# and visual studio
  2. Create a custom function for the encryption process
  3. Pass values to custom functions and events
  4. Use a character variable
  5. Use character array to help us shift the letters
  6. Covert data types
  7. Using for loops
  8. Returning value from a function
  9. Creating multiple forms
  10. Giving the user a help screen to understand how to use this application.

c-sharp-tutorial-create-a-text-encryption-app-in-visual-studio

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace WindowsFormsApplication3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        int sdvig;
        public static List<To_Analisiz_1> To_Analisiz = new List<To_Analisiz_1>();
        public class To_Analisiz_1
        {
            public char letter { get; set; }
            public int frequency { get; set; }
        }
        public class To_Rachifrowka_1
        {
            public char letter { get; set; }
            public int frequency { get; set; }
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            textBox2.Text = null;
            sdvig = Convert.ToInt32(textBox3.Text);
            //Строка, к которой применяется шифрованияе/дешифрование
            string s = "";
            //Строка - результат шифрования/дешифрования
            string result = "";
            //Величина сдвига при шифровании/дешифровании
            uint shift;
            //Считывние величины сдвига
            while (!uint.TryParse(textBox3.Text, out shift))
            {
                //Если введена неверная величина сдвига (отрицательное число, или не число)
                MessageBox.Show("Ошибка ввода, повторите попытку");
            }
            //Считывание строки
            s = textBox1.Text;
            //Выполение шифрования
            //Цикл по каждому символу строки
            for (int i = 0; i < s.Length; i++)
            {
                //Если не кириллица
                if (((int)(s[i]) < 1040) || ((int)(s[i]) > 1103))
                    result += s[i];
                //Если буква является строчной
                if ((Convert.ToInt16(s[i]) >= 1072) && (Convert.ToInt16(s[i]) <= 1103))
                {
                    //Если буква, после сдвига выходит за пределы алфавита
                    if (Convert.ToInt16(s[i]) + shift > 1103)
                        //Добавление в строку результатов символ
                        result += Convert.ToChar(Convert.ToInt16(s[i]) + shift - 32);
                    //Если буква может быть сдвинута в пределах алфавита
                    else
                        //Добавление в строку результатов символ
                        result += Convert.ToChar(Convert.ToInt16(s[i]) + shift);
                }
                //Если буква является прописной
                if ((Convert.ToInt16(s[i]) >= 1040) && (Convert.ToInt16(s[i]) <= 1071))
                {
                    //Если буква, после сдвига выходит за пределы алфавита
                    if (Convert.ToInt16(s[i]) + shift > 1071)
                        //Добавление в строку результатов символ
                        result += Convert.ToChar(Convert.ToInt16(s[i]) + shift - 32);
                    //Если буква может быть сдвинута в пределах алфавита
                    else
                        //Добавление в строку результатов символ
                        result += Convert.ToChar(Convert.ToInt16(s[i]) + shift);
                }
            }
 
 
                  
            for (int i = 0; i < textBox1.Text.Length; i++)
            {
                char Kodir_Bukwa;
                Kodir_Bukwa = textBox1.Text[i];
                if ((Kodir_Bukwa != '0') & (Kodir_Bukwa != '1') & (Kodir_Bukwa != '2') & (Kodir_Bukwa != '3') & (Kodir_Bukwa != '4') & (Kodir_Bukwa != '5') & (Kodir_Bukwa != '6') & (Kodir_Bukwa != '7') & (Kodir_Bukwa != '8') & (Kodir_Bukwa != '9') & (Kodir_Bukwa != '\r') & (Kodir_Bukwa != '\n') & (Kodir_Bukwa != '-') & (Kodir_Bukwa != '•') & (Kodir_Bukwa != ' ') & (Kodir_Bukwa != ',') & (Kodir_Bukwa != '.') & (Kodir_Bukwa != '(') & (Kodir_Bukwa != ')') & (Kodir_Bukwa != ';') & (Kodir_Bukwa != ':') & (Kodir_Bukwa != '!') & (Kodir_Bukwa != '?'))
                    textBox2.Text += Convert.ToChar(Kodir_Bukwa + sdvig);
                else textBox2.Text += Convert.ToChar(Kodir_Bukwa); 
            }
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox2.Text;
            textBox2.Text = null;
            var To_Rachifrowka = new List<To_Rachifrowka_1>();
            Chet_To_Rachifrowka(To_Rachifrowka);
            sort_Chet_Rachifrowka(To_Rachifrowka);
            Dechifrowka(To_Rachifrowka);
        }
 
        private void Dechifrowka(List<To_Rachifrowka_1> decryption)
        {
            
            for (int i = 0; i < textBox1.Text.Length; i++)
            {
                if (Char.IsLetter(textBox1.Text, i))
                {
                    //ищем букву в массиве зашифорованного текста, с целью определения ее частоты
                    To_Rachifrowka_1 result = decryption.Find(
                        delegate(To_Rachifrowka_1 letters)
                        {
                            return letters.letter == textBox1.Text[i];
                        }
                        );
                    //ищем букву с такой же частотой, какая была в зашифрованном тексте
                    To_Analisiz_1 result_1 = To_Analisiz.Find(
                       delegate(To_Analisiz_1 letters_1)
                       {
                           return letters_1.frequency == result.frequency;
                       }
                       );
                    textBox2.Text += result_1.letter;
                    // т.е. щ- 23.  ищем щ и определяем число в зашифроманном тексте - 23.
                    // ищем 23 в анализируемом ранее тексте. 23 - о. Значит там не щ, а о!
                }
                else textBox2.Text += textBox1.Text[i];
            }
        }
        //Не понятно как передать колекцию T
        private void Chet_To_Analisiz(List<To_Analisiz_1> ab)
        {
            for (int i = 0; i < textBox1.Text.Length; i++)
            {
                if (Char.IsLetter(textBox1.Text, i))
                {
                    To_Analisiz_1 result = ab.Find(
                      delegate(To_Analisiz_1 letters)
                      {
                          return letters.letter == textBox1.Text[i];
                      }
                      );
                    if (result == null)
                    {
                        ab.Add(new To_Analisiz_1(){letter = textBox1.Text[i],frequency =1});
                    }
                    else
                    {
                        result.frequency +=1;
                    }
                }
                else
                    continue;
            }
        }
        private void Chet_To_Rachifrowka(List<To_Rachifrowka_1> ab)
        {
            for (int i = 0; i < textBox1.Text.Length; i++)
            {
                if (Char.IsLetter(textBox1.Text, i))
                {
                    To_Rachifrowka_1 result = ab.Find(
                      delegate(To_Rachifrowka_1 letters)
                      {
                          return letters.letter == textBox1.Text[i];
                      }
                      );
                    if (result == null)
                    {
                        ab.Add(new To_Rachifrowka_1() { letter = textBox1.Text[i], frequency = 1 });
                    }
                    else
                    {
                        result.frequency += 1;
                    }
                }
                else
                    continue;
            }
        }
        private void sort_Chet_Rachifrowka(List<To_Rachifrowka_1> Sort)
        {
            Sort.Sort((To_Rachifrowka_1 a, To_Rachifrowka_1 b) => a.frequency.CompareTo(b.frequency));
        }
        private void sort_Chet_Analisiz(List<To_Analisiz_1> Sort)
        {
             Sort.Sort((To_Analisiz_1 a, To_Analisiz_1 b) => a.frequency.CompareTo(b.frequency));  
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
            textBox1.Text = textBox1.Text.ToLower();
            
            Chet_To_Analisiz(To_Analisiz);
            To_Analisiz.Sort((To_Analisiz_1 a, To_Analisiz_1 b) => a.frequency.CompareTo(b.frequency));
            sort_Chet_Analisiz(To_Analisiz);
            string g = "";
            g = "Буквы- Частота" + Environment.NewLine;
            for (int i = 0; i < To_Analisiz.Count; i++)
            {
                g += To_Analisiz[i].letter + " " + To_Analisiz[i].frequency + Environment.NewLine;
               // g += Convert.ToChar(To_Analisiz[0, i]) + " " + To_Analisiz[1, i].ToString() + Environment.NewLine;
               
            } textBox2.Text=(g);
        }
 
 
    }
}

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Windows 10 стал английским
  • Epson r300 драйвер windows 10 x64
  • Ashampoo winoptimizer free windows 10
  • Как выполнить поиск информационного объекта в файловых структурах windows кратко
  • Как поставить 16 бит цвета на windows 10