Шифр Цезаря - C# (190043)

Узнай цену своей работы

Формулировка задачи:

Хочу поделиться шифром Цезаря. Я взял код из интернета, точнее отсюда http://cybern.ru/cezar-csharp.html Конечно мне высвечивались ссылки и на наш любимый форум, но там как всегда никто и никогда не выкладывает в конце свой рабочий код. Брать с ошибкой, разбираться и опять повторять решение этой ошибки по советом ниже мне не хотелось. Поэтом то я и взят из выше указанного ресурса. Но так конечно-же ничего не работало и опять пришлось самому дорабатывать код. В итоге за 1ч ( знаю, что много, но я чай пил в этот момент ещё) я таки сделал код рабочим. Поэтому представляю РАБОЧИЙ КОД. Если не работает, то пните меня

Не по теме:

Все кроме Ангелины

Листинг программы
  1. //Программа шифрования/дешифрования символов кирилицы шифром Цезаря
  2. //Подключение библиотек
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using System.IO;
  8. namespace Shifrovanie_Cezar
  9. {
  10. class Program
  11. {
  12. static void Main()
  13. {
  14. //Цикл для повтора задачи
  15. do
  16. {
  17. string path = @"C:\Test.txt";
  18. //Переменная выбора шифрования/дешифрования
  19. uint k = 0;
  20. //Строка, к которой применяется шифрованияе/дешифрование
  21. string s = "";
  22. //Строка - результат шифрования/дешифрования
  23. string result = "";
  24. //Величина сдвига при шифровании/дешифровании
  25. uint shift;
  26. //Вывод сообщения на экран
  27. Console.WriteLine("Введите 1 для шифрования или 2 для дешифрования");
  28. //Считывание переменной выбора, пока она не станет равной 1 или 2
  29. while ((k != 1) && (k != 2))
  30. {
  31. //Считывание переменной k, если введенные данные имеют тип uint
  32. uint.TryParse(Console.ReadLine(), out k);
  33. //Вывод сообщения об ошибке, если k != 1 или k != 2
  34. if ((k != 1) && (k != 2))
  35. Console.WriteLine("Ошибка ввода, повторите попытку");
  36. }
  37. //Вывод сообщения на экран
  38. Console.WriteLine("Введите величину сдвига");
  39. //Считывние величины сдвига
  40. while (!uint.TryParse(Console.ReadLine(), out shift))
  41. {
  42. //Если введена неверная величина сдвига (отрицательное число, или не число)
  43. Console.WriteLine("Ошибка ввода, повторите попытку");
  44. }
  45. //Если величина сдвига больше длины алфавита кирилицы
  46. if (shift > 32)
  47. shift = shift % 32;
  48. //Если выбрано шифрование
  49. if (k == 1)
  50. {
  51. //Вывод сообщения на экран
  52. Console.WriteLine("Строка считывается из файла!");
  53. //Считывание строки
  54. s = File.ReadAllText(path, Encoding.Default);
  55. //Выполение шифрования
  56. //Цикл по каждому символу строки
  57. for (int i = 0; i < s.Length; i++)
  58. {
  59. //Если не кириллица
  60. if (((int)(s[i]) < 1040) || ((int)(s[i]) > 1103))
  61. result += s[i];
  62. //Если буква является строчной
  63. if ((Convert.ToInt16(s[i]) >= 1072) && (Convert.ToInt16(s[i]) <= 1103))
  64. {
  65. //Если буква, после сдвига выходит за пределы алфавита
  66. if (Convert.ToInt16(s[i]) + shift > 1103)
  67. //Добавление в строку результатов символ
  68. result += Convert.ToChar(Convert.ToInt16(s[i]) + shift - 32);
  69. //Если буква может быть сдвинута в пределах алфавита
  70. else
  71. //Добавление в строку результатов символ
  72. result += Convert.ToChar(Convert.ToInt16(s[i]) + shift);
  73. }
  74. //Если буква является прописной
  75. if ((Convert.ToInt16(s[i]) >= 1040) && (Convert.ToInt16(s[i]) <= 1071))
  76. {
  77. //Если буква, после сдвига выходит за пределы алфавита
  78. if (Convert.ToInt16(s[i]) + shift > 1071)
  79. //Добавление в строку результатов символ
  80. result += Convert.ToChar(Convert.ToInt16(s[i]) + shift - 32);
  81. //Если буква может быть сдвинута в пределах алфавита
  82. else
  83. //Добавление в строку результатов символ
  84. result += Convert.ToChar(Convert.ToInt16(s[i]) + shift);
  85. }
  86. }
  87. //Вывод на экран зашифрованной строки
  88. Console.WriteLine("Строка успешно зашифрована!");
  89. StreamWriter sr = new StreamWriter(@"C:\Институт\4 курс\1 семестр\kriptografia_1\криптография 1\lab1\Test.txt",false);
  90. sr.Write(result);
  91. sr.Close();
  92. Console.WriteLine(result);
  93. }
  94. //Если было выбрано дешифрование
  95. if (k == 2)
  96. {
  97. //Вывод сообщения на экран
  98. Console.WriteLine("Строка считывается из файла!");
  99. //Считывание строки
  100. //s = File.ReadAllText(path, Encoding.Default);- не читает если есть Encoding.Default
  101. StreamReader sr = new StreamReader(@"C:\Институт\4 курс\1 семестр\kriptografia_1\криптография 1\lab1\Test.txt");
  102. s = sr.ReadToEnd();
  103. sr.Close();
  104. //Time.Start();- вообще не нужно!
  105. //Выполение дешифрования
  106. //Цикл по каждому символу строки
  107. for (int i = 0; i < s.Length; i++)
  108. {
  109. if (Convert.ToInt16(s[i]) == 32)
  110. result += ' ';
  111. //Если буква является строчной
  112. if ((Convert.ToInt16(s[i]) >= 1072) && (Convert.ToInt16(s[i]) <= 1103))
  113. {
  114. //Если буква, после сдвига выходит за пределы алфавита
  115. if (Convert.ToInt16(s[i]) - shift < 1072)
  116. //Добавление в строку результатов символ
  117. result += Convert.ToChar(Convert.ToInt16(s[i]) - shift + 32);
  118. //Если буква может быть сдвинута в пределах алфавита
  119. else
  120. //Добавление в строку результатов символ
  121. result += Convert.ToChar(Convert.ToInt16(s[i]) - shift);
  122. }
  123. //Если буква является прописной
  124. if ((Convert.ToInt16(s[i]) >= 1040) && (Convert.ToInt16(s[i]) <= 1071))
  125. {
  126. //Если буква, после сдвига выходит за пределы алфавита
  127. if (Convert.ToInt16(s[i]) - shift < 1040)
  128. //Добавление в строку результатов символ
  129. result += Convert.ToChar(Convert.ToInt16(s[i]) - shift + 32);
  130. //Если буква может быть сдвинута в пределах алфавита
  131. else
  132. //Добавление в строку результатов символ
  133. result += Convert.ToChar(Convert.ToInt16(s[i]) - shift);
  134. }
  135. }
  136. //Вывод на экран дешифрованной строки
  137. Console.WriteLine("Строка успешно дешифрована!");
  138. StreamWriter sr1 = new StreamWriter(@"C:\Институт\4 курс\1 семестр\kriptografia_1\криптография 1\lab1\Test.txt", false);
  139. sr1.Write(result);
  140. sr1.Close();
  141. Console.WriteLine(result);
  142. }
  143. Console.WriteLine("Для выхода из программы нажмите Escape");
  144. } while (Console.ReadKey(true).Key != ConsoleKey.Escape);
  145. }
  146. }
  147. }

Решение задачи: «Шифр Цезаря»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9.  
  10. namespace WindowsFormsApplication3
  11. {
  12.     public partial class Form1 : Form
  13.     {
  14.         public Form1()
  15.         {
  16.             InitializeComponent();
  17.         }
  18.         int sdvig;
  19.         public static List<To_Analisiz_1> To_Analisiz = new List<To_Analisiz_1>();
  20.         public class To_Analisiz_1
  21.         {
  22.             public char letter { get; set; }
  23.             public int frequency { get; set; }
  24.         }
  25.         public class To_Rachifrowka_1
  26.         {
  27.             public char letter { get; set; }
  28.             public int frequency { get; set; }
  29.         }
  30.  
  31.         private void button1_Click(object sender, EventArgs e)
  32.         {
  33.             textBox2.Text = null;
  34.             sdvig = Convert.ToInt32(textBox3.Text);
  35.             //Строка, к которой применяется шифрованияе/дешифрование
  36.             string s = "";
  37.             //Строка - результат шифрования/дешифрования
  38.             string result = "";
  39.             //Величина сдвига при шифровании/дешифровании
  40.             uint shift;
  41.             //Считывние величины сдвига
  42.             while (!uint.TryParse(textBox3.Text, out shift))
  43.             {
  44.                 //Если введена неверная величина сдвига (отрицательное число, или не число)
  45.                 MessageBox.Show("Ошибка ввода, повторите попытку");
  46.             }
  47.             //Считывание строки
  48.             s = textBox1.Text;
  49.             //Выполение шифрования
  50.             //Цикл по каждому символу строки
  51.             for (int i = 0; i < s.Length; i++)
  52.             {
  53.                 //Если не кириллица
  54.                 if (((int)(s[i]) < 1040) || ((int)(s[i]) > 1103))
  55.                     result += s[i];
  56.                 //Если буква является строчной
  57.                 if ((Convert.ToInt16(s[i]) >= 1072) && (Convert.ToInt16(s[i]) <= 1103))
  58.                 {
  59.                     //Если буква, после сдвига выходит за пределы алфавита
  60.                     if (Convert.ToInt16(s[i]) + shift > 1103)
  61.                         //Добавление в строку результатов символ
  62.                         result += Convert.ToChar(Convert.ToInt16(s[i]) + shift - 32);
  63.                     //Если буква может быть сдвинута в пределах алфавита
  64.                     else
  65.                         //Добавление в строку результатов символ
  66.                         result += Convert.ToChar(Convert.ToInt16(s[i]) + shift);
  67.                 }
  68.                 //Если буква является прописной
  69.                 if ((Convert.ToInt16(s[i]) >= 1040) && (Convert.ToInt16(s[i]) <= 1071))
  70.                 {
  71.                     //Если буква, после сдвига выходит за пределы алфавита
  72.                     if (Convert.ToInt16(s[i]) + shift > 1071)
  73.                         //Добавление в строку результатов символ
  74.                         result += Convert.ToChar(Convert.ToInt16(s[i]) + shift - 32);
  75.                     //Если буква может быть сдвинута в пределах алфавита
  76.                     else
  77.                         //Добавление в строку результатов символ
  78.                         result += Convert.ToChar(Convert.ToInt16(s[i]) + shift);
  79.                 }
  80.             }
  81.  
  82.  
  83.                  
  84.             for (int i = 0; i < textBox1.Text.Length; i++)
  85.             {
  86.                 char Kodir_Bukwa;
  87.                 Kodir_Bukwa = textBox1.Text[i];
  88.                 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 != '?'))
  89.                     textBox2.Text += Convert.ToChar(Kodir_Bukwa + sdvig);
  90.                 else textBox2.Text += Convert.ToChar(Kodir_Bukwa);
  91.             }
  92.         }
  93.  
  94.         private void button2_Click(object sender, EventArgs e)
  95.         {
  96.             textBox1.Text = textBox2.Text;
  97.             textBox2.Text = null;
  98.             var To_Rachifrowka = new List<To_Rachifrowka_1>();
  99.             Chet_To_Rachifrowka(To_Rachifrowka);
  100.             sort_Chet_Rachifrowka(To_Rachifrowka);
  101.             Dechifrowka(To_Rachifrowka);
  102.         }
  103.  
  104.         private void Dechifrowka(List<To_Rachifrowka_1> decryption)
  105.         {
  106.            
  107.             for (int i = 0; i < textBox1.Text.Length; i++)
  108.             {
  109.                 if (Char.IsLetter(textBox1.Text, i))
  110.                 {
  111.                     //ищем букву в массиве зашифорованного текста, с целью определения ее частоты
  112.                     To_Rachifrowka_1 result = decryption.Find(
  113.                         delegate(To_Rachifrowka_1 letters)
  114.                         {
  115.                             return letters.letter == textBox1.Text[i];
  116.                         }
  117.                         );
  118.                     //ищем букву с такой же частотой, какая была в зашифрованном тексте
  119.                     To_Analisiz_1 result_1 = To_Analisiz.Find(
  120.                        delegate(To_Analisiz_1 letters_1)
  121.                        {
  122.                            return letters_1.frequency == result.frequency;
  123.                        }
  124.                        );
  125.                     textBox2.Text += result_1.letter;
  126.                     // т.е. щ- 23.  ищем щ и определяем число в зашифроманном тексте - 23.
  127.                     // ищем 23 в анализируемом ранее тексте. 23 - о. Значит там не щ, а о!
  128.                 }
  129.                 else textBox2.Text += textBox1.Text[i];
  130.             }
  131.         }
  132.         //Не понятно как передать колекцию T
  133.         private void Chet_To_Analisiz(List<To_Analisiz_1> ab)
  134.         {
  135.             for (int i = 0; i < textBox1.Text.Length; i++)
  136.             {
  137.                 if (Char.IsLetter(textBox1.Text, i))
  138.                 {
  139.                     To_Analisiz_1 result = ab.Find(
  140.                       delegate(To_Analisiz_1 letters)
  141.                       {
  142.                           return letters.letter == textBox1.Text[i];
  143.                       }
  144.                       );
  145.                     if (result == null)
  146.                     {
  147.                         ab.Add(new To_Analisiz_1(){letter = textBox1.Text[i],frequency =1});
  148.                     }
  149.                     else
  150.                     {
  151.                         result.frequency +=1;
  152.                     }
  153.                 }
  154.                 else
  155.                     continue;
  156.             }
  157.         }
  158.         private void Chet_To_Rachifrowka(List<To_Rachifrowka_1> ab)
  159.         {
  160.             for (int i = 0; i < textBox1.Text.Length; i++)
  161.             {
  162.                 if (Char.IsLetter(textBox1.Text, i))
  163.                 {
  164.                     To_Rachifrowka_1 result = ab.Find(
  165.                       delegate(To_Rachifrowka_1 letters)
  166.                       {
  167.                           return letters.letter == textBox1.Text[i];
  168.                       }
  169.                       );
  170.                     if (result == null)
  171.                     {
  172.                         ab.Add(new To_Rachifrowka_1() { letter = textBox1.Text[i], frequency = 1 });
  173.                     }
  174.                     else
  175.                     {
  176.                         result.frequency += 1;
  177.                     }
  178.                 }
  179.                 else
  180.                     continue;
  181.             }
  182.         }
  183.         private void sort_Chet_Rachifrowka(List<To_Rachifrowka_1> Sort)
  184.         {
  185.             Sort.Sort((To_Rachifrowka_1 a, To_Rachifrowka_1 b) => a.frequency.CompareTo(b.frequency));
  186.         }
  187.         private void sort_Chet_Analisiz(List<To_Analisiz_1> Sort)
  188.         {
  189.              Sort.Sort((To_Analisiz_1 a, To_Analisiz_1 b) => a.frequency.CompareTo(b.frequency));  
  190.         }
  191.  
  192.         private void button3_Click(object sender, EventArgs e)
  193.         {
  194.             textBox1.Text = textBox1.Text.ToLower();
  195.            
  196.             Chet_To_Analisiz(To_Analisiz);
  197.             To_Analisiz.Sort((To_Analisiz_1 a, To_Analisiz_1 b) => a.frequency.CompareTo(b.frequency));
  198.             sort_Chet_Analisiz(To_Analisiz);
  199.             string g = "";
  200.             g = "Буквы- Частота" + Environment.NewLine;
  201.             for (int i = 0; i < To_Analisiz.Count; i++)
  202.             {
  203.                 g += To_Analisiz[i].letter + " " + To_Analisiz[i].frequency + Environment.NewLine;
  204.                // g += Convert.ToChar(To_Analisiz[0, i]) + " " + To_Analisiz[1, i].ToString() + Environment.NewLine;
  205.                
  206.             } textBox2.Text=(g);
  207.         }
  208.  
  209.  
  210.     }
  211. }

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


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

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

9   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут