Документация Engee
Notebook

Шифр Цезаря

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

В данном примере мы воспользуемся таблицей ASCII для реализации этого алгоритма. Определим функцию для кодирования и декодирования строки с помощью шифра Цезаря.

In [ ]:
function caesar_cipher_encode_decode(text::String, shift::Int, code::Bool)
    encoded_text = Char[]
    # Проходим по каждому символу в строке
    for char in text
        ascii_code = Int(char) # Преобразуем символ к его индексу в ASCII

        # Определяем новое значение ASCII-кода в зависимости от типа операции (кодирование или декодирование)
        if code
            new_ascii_code = ascii_code + shift # Если кодируем, добавляем сдвиг к текущему значению ASCII-кода
        else
            new_ascii_code = ascii_code - shift # Если декодируем, вычитаем сдвиг из текущего значения ASCII-кода
        end
        push!(encoded_text, Char(new_ascii_code)) # Преобразуем новое значение ASCII-кода обратно в символ и добавляем его в массив
    end
    return join(encoded_text) # Соединяем все символы в единую строку и возвращаем результат
end
Out[0]:
caesar_cipher_encode_decode (generic function with 2 methods)
In [ ]:
# Пример использования функций
plaintext = "Engee"
shift_amount = 3

ciphertext = caesar_cipher_encode_decode(plaintext, shift_amount, true)
println("Encoded Text: ", ciphertext)

decrypted_text = caesar_cipher_encode_decode(ciphertext, shift_amount, false)
println("Decoded Text: ", decrypted_text)
Encoded Text: Hqjhh
Decoded Text: Engee

Вывод

Как видно, в результате преобразований мы получили исходное слово. Значит, наша функция работает корректно.