Как сделать шифр цезаря в с

Добавил пользователь Валентин П.
Обновлено: 08.09.2024

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

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

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

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

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

Решение:

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 Codeс(string m, int key) //кодирование и декодирование в зависимости от знака ключа
<
string res="", tmp="";
for(int i=0;i

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

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

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

4 комментария:

Не работает. Точнее работает, но не правильно. Любое слово шифрует одинаково при одинаковом значении сдвига.

namespace Shifr
class Program
static void Main(string[] args)
Console.WriteLine("Введите слово,которое нужно зашифровать:");
string s = Console.ReadLine();
string abc = "abcdefghijklmnopqrstuvwxyz";
//abc наш алфавит
Console.WriteLine("Укажите длину сдвига");
int len = Convert.ToInt32(Console.ReadLine());
// len - число сдвигов в сторону
int a;
string code = string.Empty;
for(int i =0; i Ответить Удалить

При вводе слова "Информация" выдается ошибка на последнюю букву "Я" в алфавите, поэтому перед строчкой code += abc[a]; добавьте строчку if (a > 32) a -= 33; Тогда программа будет правильно работать)))


Шифр Цезаря, также известный как шифр сдвига, код Цезаря или сдвиг Цезаря — один из самых простых и наиболее широко известных методов шифрования. Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите. Например, в шифре со сдвигом вправо на 3, А была бы заменена на Г, Б станет Д, и так далее. Шифр назван в честь римского императора Гая Юлия Цезаря, использовавшего его для секретной переписки со своими генералами.
Шаг шифрования, выполняемый шифром Цезаря, часто включается как часть более сложных схем, таких как шифр Виженера, и все ещё имеет современное приложение в системе ROT13. Как и все моноалфавитные шифры, шифр Цезаря легко взламывается и не имеет практически никакого применения на практике.

Кратко об истории шифра

Его племянник, Август, также использовал этот шифр, но со сдвигом вправо на один, и он не повторялся к началу алфавита: Всякий раз, когда он записывал шифром, он записал B для A, C для B, и остальной части букв на том же самом принципе, используя AA для X. Гай Светоний Транквилл Жизнь двенадцати цезарей, Книга вторая, гл. 88


Пример

Исходный алфавит: АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ
Шифрованный: ГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯАБВ

Съешь же ещё этих мягких французских булок, да выпей чаю .

Шифрованный текст получается путём замены каждой буквы оригинального текста соответствующей буквой шифрованного алфавита:

Фэзыя йз зьи ахлш пвёнлш чугрщцкфнлш дцосн, жг еютзм ъгб .

Модификации

Шифр Гронсфельда — полиалфавитный подстановочный шифр создан графом Гронсвельдом (руководителем первой дешифровальной службы Германии) в XVII веке. Шифр можно считать усовершенствованием шифра Цезаря (надежность) и Виженера / Бофора (скорость).

Ключ

Реализация на Python: Шифр Гронсфельда

Инструменты

Примеры тасков

Система Цезаря с ключевым словом. В этой системе шифрования наряду с числовым ключом K, 0 ? K ? (M-1), задающим смещение, используется ключевое слово для изменения порядка символов в заменяющем алфавите.

В качестве ключевого слова необходимо выбирать слово или короткую фразу (не более длины алфавита). Все буквы ключевого слова должны быть различными.

Для создания таблицы замены ключевое слово записываем под буквами алфавита, начиная с буквы, числовой код которой совпадает с выбранным числовым ключом K. Оставшиеся буквы алфавита замены записываем в алфавитном порядке (избегая повтора букв) после ключевого слова. При достижении конца таблицы циклически переходим на ее начало и дописываем последние буквы алфавита не встречавшиеся ранее.


Читайте также: