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 commitHistory3 Commits |
|||
CaesarCipher |
CaesarCipher |
||
.gitignore |
.gitignore |
||
CaesarCipher.sln |
CaesarCipher.sln |
||
README.md |
README.md |
||
Repository files navigation
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%
Если интересуют «Атака», «Взлом» — то ищите
здесь «Шифрование, Кодирование и/или Сжатие Информации»
- Данные на входе и интерфейс программы на C# Visual Studio
- Перебор символов строки в цикле
- Тестирование готового приложения Шифр Цезаря
- Классы, упрощающие решение задачи
Задание:
Разработать программу, кодирующую входную строку методом моноалфавитной подстановки, используя «шифр Цезаря».
Программа должна поддерживать ввод широких символов (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
- Create a simple windows form application in C# and visual studio
- Create a custom function for the encryption process
- Pass values to custom functions and events
- Use a character variable
- Use character array to help us shift the letters
- Covert data types
- Using for loops
- Returning value from a function
- Creating multiple forms
- 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); } } }