Рубрики
Без рубрики

Реализация цезаря шифра в Python

INTRO: О CEASAR CIPHER Caesar Chiph – это простой шифр, который был вокруг … Теги от шифров, криптография, Python.

INTRO: О CEASAR CIPHER

Шифр Caesar – это простой шифр, который был в течение длительного времени. Юлий Цезарь использовал его в некоторых его переписке в течение 2000 лет назад. Он имеет приложения в других шифрах, но не предлагает полезного уровня безопасности из-за того, насколько легко расшифровать.

Шифр работает, переключая каждую букву в сообщении одинаковую сумму для каждой буквы. Например, если я установил свой коэффициент вращения на три, буква «A» дает «d».

Чтобы увидеть это более четко, диаграмма ниже демонстрирует, как обрабатывать сдвиги, которые достигают конца алфавита. Поскольку сдвиг достигает конца алфавита, охватывает «Z» и становится «C», используя сдвиг трех.

Теперь давайте сделаем более полный пример. Если мы используем правильный сдвиг 20 и примените его к каждой букве в сообщении «Hello World!» мы получаем зашифрованный текст “BYFFI QILFX!”

И наоборот, если мы хотим расшифровать это, мы применяем шифр в обратный и сдвиг влево вместо справа. Из этого мы видим, что две вариабельные части шифра являются 1. Каким образом вы переключаетесь и 2. Насколько.

Кодирование шифра

Как упражнение, я написал простой сценарий Python для выполнения вращений для меня. Во-первых, я разработал математику для обработки сдвига (включая упаковку), поскольку это была самая сложная часть. Затем я итасировал каждый персонаж и применил вычисление. Наконец, я добавил простой CLI, а затем опубликовал его на Github Отказ

Ниже приведена моя реализация Caesar Chipher. Python не позволяет выполнять математические операции на буквах, поэтому вы должны использовать функцию «ORD», чтобы сначала преобразовать их в точку кода Unicode.

def apply_rotation(c, factor):
    """Applies a shift of factor to the letter denoted by c"""
    if c.isalpha():
        lower = ord('A') if c.isupper() else ord('a')
        c = chr(lower + ((ord(c) - lower + factor) % 26))
    return c

def caesar_cipher(s, k):
    """Iterates through each letter and constructs the cipher text"""
    new_message = ''
    factor = k % 26
    for c in s:
        new_message += apply_rotation(c, factor)
    return new_message

Математика

Давайте поработаем через метод Apply_rotation с одной буквой «A», поскольку это немного сложно читать.

Во-первых, мы назначаем значение «ниже» на «A» или «A» в зависимости от случая для построения смещения. Глядя на внутренние скобки, мы преобразуем символ в кодовую точку и вычесть «ниже». Письмо «A» имеет кодовую точку 97, поэтому, если наше письмо обозначено переменной «C», было «F» (у которой есть кодовая точка 102), мы получили бы 5 (102 -). Затем мы можем добавить наш коэффициент сдвига (3 для нашего примера), который дает нам 8.

Перед посмотрим на остальную часть математики, если вы индексируете 26 буквенного алфавита 1-26, 5 – буква «F», которая является то, что мы хотим трансформироваться. Добавление смены дает нам 8, какие карты на букву «I», который является нашим текущим результатом. Python не знает 8 урожайности и «я», хотя, но это нормально, потому что оставшаяся часть уравнения исправляет ее для нас.

Выполнение модуля 26 просто возвращает 8 для этого примера, чтобы мы могли игнорировать это на данный момент. Это оставляет нас с последним этапом добавления кодового значения кода Unicode «ниже» на 8 I.e. 97 +. Теперь мы можем преобразовать кодовую точку Unicode обратно в строку с помощью встроенного метода Python «CHR», который дает нам «I».

Модуль

Это довольно простая математика, хотя, так почему мы добавляем ниже и вычтите его в том же уравнении? Разве те не отменили друг друга? Да, но Поскольку алфавит основан на 26 символах, нам необходимо до 0-26 значений кода Unicode к нашему индексу 1-26, чтобы мы могли использовать модуль для обработки сдвигов, которые необходимо обернуть.

Модуль помогает нам с нашей обработкой кода. Если мы снова пройдем по математике, но вместо этого применим сдвиг 3 на букву «z», который имеет кодовую точку 122, мы должны обернуть буквы, в противном случае мы получаем кодовую точку 125, что является символом «}».

Игнорирование финала, добавление «нижнего» уравнения в конечном итоге (122 – 97 + 3)% 26. Это уменьшает до 28% 26. 28 не в алфавите, однако, когда мы применим модуль, мы окажемся с 2. Наконец мы можем добавить последний «нижний», чтобы закончить с помощью математики. Применение метода CHR, мы получаем букву «C».

Бонус: В полном примере кода я использую модуль 26, чтобы обрабатывать сдвиги больше 26. например Сдвиг 27 является эквивалентом 1 (27%).

Резюме

Шифр Caesar – это простой шифр, который сдвигает каждую букву на установленную сумму. Мы производим расшифрованное сообщение, выполнив смещение в обратном направлении.

Пост Реализация Caesar Chipher в Python появился первым на Морган Адамс Отказ

Оригинал: “https://dev.to/_morgan_adams_/caesar-cipher-implementation-in-python-2fp3”