Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы
Шифр Цезаря на языке Си
В этой статье я расскажу про шифрование текста на языке C методом сдвига символов (также известный как шифр Цезаря). Пользователь вводит натуральное число n — это количество символов, на которое мы сдвигаем данный символ. Например, если n = 2, то буква ‘б’ превращается в букву ‘г’. Будем считать, что буквы идут по кругу, то есть за буквой ‘я’ следует буква ‘а’.
Программа должна уметь как зашифровывать, так и расшифровывать текст. Шифровать будем только русские и английские буквы (другие символы: знаки препинания, пробелы и т.п. — шифровать не будем, оставим их без изменения). Ввод/вывод производим из файла.
Приступим к написанию программы. Подключим необходимые библиотеки и определим две константы — количество букв в английском и русском алфавитах соответственно.
Примечание. Константу RUS сделаем равной 32, потому что буква ‘ё’ в таблице символов ASCII в кодировке Windows 1251 находится за границей русского алфавита.
Шифр Цезаря
Источник: vscode.ru
fedorsirotkin/CaesarEncryption
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags
Nothing to show
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Cancel Create
- Local
- Codespaces
HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
Latest commit message
Commit time
README.md
Шифрование методом Цезаря
Изучить способ шифрования методом Цезаря. Реализовать программный интерфейс, реализующий данный метод.
Шифр Цезаря, также известный как шифр сдвига, код Цезаря или сдвиг Цезаря – один из самых простых и наиболее широко известных методов шифрования.
Шифр Цезаря – это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется символом, находящимся на некотором постоянном числе позиций левее или правее него в алфавите. Например, в шифре со сдвигом вправо на 3, А была бы заменена на Г, Б станет Д, и так далее.
Шифр назван в честь римского императора Гая Юлия Цезаря, использовавшего его для секретной переписки со своими генералами.
Шаг шифрования, выполняемый шифром Цезаря, часто включается как часть более сложных схем, таких как шифр Виженера, и всё ещё имеет современное приложение в системе ROT13. Как и все моноалфавитные шифры, шифр Цезаря легко взламывается и не имеет почти никакого применения на практике.
Принцип работы метода
Если сопоставить каждому символу алфавита его порядковый номер (нумеруя с 0), то шифрование и дешифрование можно выразить формулами модульной арифметики:
y = ( x + k ) mod n x = ( y — k + n) mod n,
где x – символ открытого текста, y – символ шифрованного текста, n – мощность алфавита, k – ключ.
С точки зрения математики шифр Цезаря является частным случаем аффинного шифра.
Шифрование с использованием ключа k = 3. Буква «Е» «сдвигается» на три буквы вперёд и становится буквой «З». Твёрдый знак, перемещенный на три буквы вперёд, становится буквой «Э», буква «Я», перемещенная на три буквы вперёд, становится буквой «В», и так далее.
А Б В Г Д Е Ё Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я _
СЛУЧАЙНАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ ЯВЛЯЕТСЯ СМУТНЫМ ПОНЯТИЕМ, ОЛИЦЕТВОРЯЮЩИМ ИДЕЮ ПОСЛЕДОВАТЕЛЬНОСТИ, В КОТОРОЙ КАЖДЫЙ ЧЛЕН ЯВЛЯЕТСЯ НЕПРЕДСКАЗУЕМЫМ ДЛЯ НЕПОСВЯЩЕННЫХ
ФОЦЬГРГБВТСФОИЗСЕГХИОЮРСФХЮВБЕОБИХФБВФПЦХРПВТСРБХМИПВСОМЩИХЕСУБАЭМПВМЗИАВТСФОИЗСЕГХИОЮРСФХМВЕВНСХСУСВНГКЗВЬОИРВБЕОБИХФБВРИТУИЗФНГЛЦИППВЗОБВРИТСФЕБЭИРРШ
Шифрованный текст получается путём замены каждой буквы оригинального текста соответствующей буквой шифрованного алфавита.
Источник: github.com
Шифр Цезаря на C#
Сегодня разберём самый простой тип шифрования — шифр Цезаря.
Данная статья будет полезна на уроке информатики старших классов при прохождении массивов.
Так же поступал и великий полководец, политический деятель Юлий Цезарь! Но ему лень было придумывать каждой букве символ, и он сделал сдвиг по алфавиту на 3 позиции по кольцу, т.е., если на русский алфавит переводить, буква а превращалась в букву г, буква б -> д и т.д., а буква э -> а, ю -> б, я -> в.
Такой подход к шифрованию, как замена символов алфавита на другие, называется Шифром Цезаря.
Стоит отметить, что данный вид шифрования легко раскрывается с помощью, так называемого, частотного анализа. Ведь буквы о, а чаще встречаются, чем остальные! Такие образом, легко распознать различные буквы и разгадать в целом сообщение.
Задача: Написать программу, которая считывает сообщение из файла 1.txt, шифрует это сообщение шифром Цезаря (сдвигает каждую букву алфавита на 3 позиции по кольцу) и записывает результат в файл 2.txt. Задачу применить только к буквам русского алфавита нижнего регистра. Если встретятся символы не из русского алфавита, то их оставить без изменений.
Решение: Программу будем писать на языке программирования C#. Данный язык можно использовать на олимпиадах по информатике.
Вначале, считываем из файла сообщение с нужной кодировкой. Преобразуем считанное сообщение в набор символов. Затем перебираем каждый символ, ищем для каждого символа индекс в алфавите. Прибавляем к этому индексу число 3. Если индекс, после прибавления, больше, чем 32, т.е. мы превзошли букву «я», значит, мы должны отнять 33, чтобы кольцо замкнулось.
Пример, пусть после прибавления индекс равен 33. Тогда мы отнимаем 33-33=0. Получился индекс равен 0. Как раз буква «а». Всё правильно. После того, как мы вычислили новый индекс, мы должны заменить наш символ, тем символом, который находится в алфавите под новым индексом.
После того как все символы перебрали, преобразуем массив символов в строку и записываем в файл. Не забудем добавить условие, чтобы преобразовывались только символы из алфавита.
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; namespace ConsoleApp5 < class Program < static void Main(string[] args) < // Cчитываем из файла сообщения string m = File.ReadAllText(«1.txt», Encoding.GetEncoding(1251)); int nomer; // Номер в алфавите int d; // Смещение string s; //Результат int j; // Переменная для циклов char[] massage = m.ToCharArray(); // Превращаем строку в массив символов. char[] alfavit = < ‘а’, ‘б’, ‘в’, ‘г’, ‘д’, ‘е’, ‘ё’, ‘ж’, ‘з’, ‘и’, ‘й’, ‘к’, ‘л’, ‘м’, ‘н’, ‘о’, ‘п’, ‘р’, ‘с’, ‘т’, ‘у’, ‘ф’, ‘х’, ‘ц’, ‘ч’, ‘ш’, ‘щ’, ‘ъ’, ‘ы’, ‘ь’, ‘э’, ‘ю’, ‘я’ >; // Перебираем каждый символ сообщения for (int i = 0; i < massage.Length; i++) < // Ищем индекс буквы for (j = 0; j < alfavit.Length; j++) < if (massage[i] == alfavit[j]) < break; > > if (j != 33) // Если j равно 33, значит символ не из алфавита < nomer = j; // Индекс буквы d = nomer + 3; // Делаем смещение // Проверяем, чтобы не вышли за пределы алфавита if (d > 32) < d = d — 33; >massage[i] = alfavit[d]; // Меняем букву > > s = new string(massage); // Собираем символы обратно в строку. File.WriteAllText(«2.txt», s); // Записываем результат в файл. > > >
Файлы должны находится по адресу: C:UsersАдминистраторDocumentsVisual Studio 2017Projects[*Название проекта*][*Название проекта*]binDebug
Файл 1.txt:
привет это тестовая строка
Файл 2.txt:
тулезх ахс хзфхсегв фхуснг
На этом всё! А дешифратор шифра Цезаря напишите самостоятельно! Любите информатику! до новых встреч!
Источник: code-enjoy.ru