Аффинное шифрование с использованием Python

Affinnoe Sifrovanie S Ispol Zovaniem Python



Тема содержания:

  1. Введение
  2. Предварительные знания
  3. Уравнение аффинного шифрования
  4. Аффинное шифрование с использованием Python
  5. Доказательство концепции
  6. Заключение
  7. Часто задаваемые вопросы (FAQ)

Аффинный шифр представляет собой особый вид шифра замены, подпадающий под категорию одноалфавитных шифров. В отличие от более известного шифра Цезаря, который сдвигает каждую букву открытого текста на фиксированное три числа позиций, аффинный шифр использует два ключа (a и b). Выбор ключей требует особого внимания.

Предварительные знания

Чтобы глубже понять сегодняшнюю тему, вам необходимо понять следующие понятия:







  • Наибольший общий делитель (НОД) и взаимно простое число
  • Модульная арифметика

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



Уравнение аффинного шифрования

Начнем с формулы шифрования аффинного шифра:



E(x) = (a.x + b) mod m
Бывший) Обозначает шифрование алфавитного индекса x.
а Значение индекса «специального» первого ключа
Икс Индексное значение простой буквы
б Значение индекса второго ключа (дополнительное значение сдвига)
мод м Операции по модулю общего количества алфавита, равного 26


Альтернативное изображение и подпись : Уравнение аффинного шифрования





Например, мы хотим зашифровать открытый текст «BIMANDO» с помощью ключей 7 и 13. Используя следующий индекс таблицы, мы сначала преобразуем открытый текст в соответствующее ему число:


Альтернативное изображение и подпись : Индексная нумерация



Открытый текст «BIMANDO» преобразуется в индексный номер «1 8 12 0 13 3 14».


Альтернативное изображение и подпись : Преобразование открытого текста в значение индексной нумерации.

Затем мы применяем расчет по уравнению, и результат показывается следующим образом:


Альтернативное изображение и подпись : Аффинное шифрование

Итак, открытый текст «BIMANDO» шифруется с использованием аффинного шифра с ключами 7 и 13, в результате чего получается «URTNAIH».

Аффинное шифрование с использованием Python

Теперь предположим, что мы хотим отправить конфиденциальное сообщение, содержащее несколько абзацев. Выполнение шифрования аффинным шифром вручную требует много усилий и времени и имеет высокую вероятность ошибки при расчете, не так ли? Поэтому нам нужна программа, автоматизирующая процесс шифрования Affine Cipher. Ниже приведен пошаговый процесс создания программы Python:

1. Импортируйте необходимые библиотеки.
Наша программа начинается с импорта необходимых модулей, таких как argparse, string и os, для анализа аргументов командной строки, строковых операций и функций, связанных с операционной системой, соответственно.

Импортировать argparse
Импортировать нить
Импортировать ты

2. Определение сопоставления алфавита
Затем мы определяем алфавит как строку строчных английских букв. Позже это используется для сопоставления символов во время процесса шифрования.

алфавит '=' нить . ascii_lowercase

3. Функция шифрования аффинного шифра.
Это основная функция нашей программы. Он берет входной текст и два ключа, «a» и «b», и применяет к тексту шифрование аффинным шифром, сохраняя структуру текста.

защита affine_cipher_encryption ( текст , а , б ) :
зашифрованный_текст '=' ''
для голец в текст:
если чар. ниже ( ) в алфавит:
если чар. ужин ( ) :
зашифрованный_текст + '=' чр ( ( ( а * ( слово ( чар. ниже ( ) ) - 97 ) + б ) % 26 ) + 65 )
еще :
зашифрованный_текст + '=' чр ( ( ( а * ( слово ( голец ) - 97 ) + б ) % 26 ) + 97 )
еще :

4. Условная основная проверка
В этом коде блока проверьте, выполняется ли он как основная программа. Он настраивает анализатор аргументов с описаниями сценария и его аргументов. Обязательный аргумент — это всего лишь путь к входному текстовому файлу. Когда мы не указываем выходной путь, мы хотим, чтобы по умолчанию было установлено имя входного файла с добавленным к нему «_encrypted». Для аргумента «ключи» мы хотим, чтобы он был отформатирован как «a,b». Но если мы его установим, по умолчанию будут 5 и 8.

если __имя__ == '__основной__' :
парсер '=' argparse. АргументПарсер ( описание '=' «Аффинное шифрование текстового файла» )
парсер . add_argument ( 'входной_файл' , помощь '=' «Путь к входному текстовому файлу» )
парсер . add_argument ( '-к' , '-ключи' , тип '=' ул. , по умолчанию '=' '5,8' , помощь '=' «Ключи для аффинного шифра в формате «a,b»» )
аргументы '=' парсер . parse_args ( )

а , б '=' карта ( интервал , аргументы. ключи . расколоть ( ',' ) )

с открыть ( аргументы. входной_файл , 'р' ) как файл :
текст '=' файл . читать ( )

# Извлекаем имя файла из пути к входному файлу
имя_входного_файла , расширение '=' ты . путь . разделить текст ( аргументы. входной_файл )
default_output_file '=' имя_входного_файла + '_зашифровано' + расширение

# Зашифруйте текст, используя аффинный шифр
зашифрованный_текст '=' affine_cipher_encryption ( текст , а , б )

# Записываем зашифрованный текст в новый файл
с открыть ( default_output_file , 'В' ) как файл :
файл . писать ( зашифрованный_текст )

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

Теперь сохраните его в «affine_cipher.py». Теперь запустите программу, введя следующую команду:

Python affine_cipher. пи -час

Если вы не обнаружите ошибок, результат будет выглядеть следующим образом:


Альтернативное изображение и подпись : Программа Python с аффинным шифром

Доказательство концепции

У нас есть конфиденциальное сообщение со следующим именем «message.txt», и мы хотим передать его нашим участникам:


Альтернативное изображение и подпись : Простой текст

Итак, мы используем программу, которую мы создали до того, как хотим зашифровать это сообщение с помощью аффинного шифра с ключами 3 и 7. Команда выглядит следующим образом:

Python affine_cipher. пи сообщение. текст 3 , 7


Альтернативное изображение и подпись : Программа Python с аффинным шифром

Зашифрованное сообщение успешно создается и сохраняется в «message_encrypted.txt» в мгновение ока. Давайте проверим, как выглядит сообщение:


Альтернативное изображение и подпись : Аффинный зашифрованный текст

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

Попробуй сам

Загрузите исходный код этой программы на нашей странице GitHub по адресу https://github.com/bimando/Affine-Cipher .

Заключение

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

Уравнение аффинного шифрования E(x) = (a.x + b) mod m служит фундаментальным инструментом шифрования, где «a» и «b» представляют собой ключи, а «x» символизирует индекс буквы открытого текста. Было продемонстрировано, что реализация автоматизированной программы Python для процесса шифрования аффинного шифрования позволяет эффективно оптимизировать крупномасштабные задачи шифрования. Программа включает в себя ключевые функции, включая импорт библиотек, сопоставление алфавита, функцию шифрования и анализ аргументов командной строки для путей ввода и вывода. Примечательно, что сценарий включает настройки по умолчанию для ключей и имен выходных файлов, чтобы облегчить процесс шифрования.

Часто задаваемые вопросы (FAQ)

Вопрос 1: Что такое аффинный шифр и чем он отличается от шифра Цезаря?

A1: Аффинный шифр — это тип одноалфавитного шифра замены, в котором для шифрования используются два ключа: «a» и «b». Напротив, шифр Цезаря использует фиксированный сдвиг на три позиции для каждой буквы открытого текста.

В2. Каковы предпосылки для понимания аффинного шифра?

A2: Чтобы полностью понять аффинный шифр, крайне важно иметь представление о таких понятиях, как наибольший общий делитель (НОД), взаимно простые числа и модульная арифметика.

Вопрос 3. Как зашифровать сообщение с помощью аффинного шифра в Python?

A3: Чтобы автоматизировать процесс шифрования аффинного шифрования, вы можете использовать программу Python, описанную в статье. Программа эффективно шифрует большие объемы ввода текста, упрощая процедуру шифрования. В статье представлены пошаговые инструкции по импорту библиотек, определению сопоставления алфавита, созданию функции шифрования и анализу аргументов командной строки для путей ввода и вывода.