Реализация шифрования перестановки столбцов на Python

PythonPythonBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом проекте вы научитесь реализовывать алгоритм шифрования "Перестановка столбцов" на Python. Шифрование "Перестановка столбцов" - это метод шифрования открытого текста путем перестановки столбцов матрицы, образованной из входного текста, на основе ключевого слова.

👀 Предварительный просмотр

## Пример 1
text = "welcometolq"; encryption_text = "ct,emlwooleq"
## Пример 2
text = "welcometolq "; encryption_text = "ct emlwooleq"
## Пример 3
text = "w"; encryption_text = ",,w,"
## Пример 4
text = None; encryption_text = None

🎯 Задачи

В этом проекте вы научитесь:

  • Основным понятиям шифрования "Перестановка столбцов"
  • Как реализовать алгоритм шифрования "Перестановка столбцов" на Python
  • Как протестировать алгоритм шифрования с использованием примеров входных данных

🏆 Достижения

После завершения этого проекта вы сможете:

  • Разобраться в принципах шифрования "Перестановка столбцов"
  • Реализовать алгоритм шифрования "Перестановка столбцов" на Python
  • Шифровать и дешифровать текст с использованием метода шифрования "Перестановка столбцов"

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ModulesandPackagesGroup(["Modules and Packages"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python/BasicConceptsGroup -.-> python/strings("Strings") python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/DataStructuresGroup -.-> python/lists("Lists") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/ModulesandPackagesGroup -.-> python/standard_libraries("Common Standard Libraries") python/FileHandlingGroup -.-> python/file_operations("File Operations") subgraph Lab Skills python/strings -.-> lab-302705{{"Реализация шифрования перестановки столбцов на Python"}} python/conditional_statements -.-> lab-302705{{"Реализация шифрования перестановки столбцов на Python"}} python/lists -.-> lab-302705{{"Реализация шифрования перестановки столбцов на Python"}} python/function_definition -.-> lab-302705{{"Реализация шифрования перестановки столбцов на Python"}} python/standard_libraries -.-> lab-302705{{"Реализация шифрования перестановки столбцов на Python"}} python/file_operations -.-> lab-302705{{"Реализация шифрования перестановки столбцов на Python"}} end

Разобраться с шифрованием "Перестановка столбцов"

В этом шаге вы научитесь основным понятиям шифрования "Перестановка столбцов" и понять, как он работает.

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

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

Открытый текст: welcometolq

Ключ: qiao

Символ заполнения: ,

  1. Длина ключа qiao равна 4. Затем ключу назначаются номера в алфавитном порядке 26 английских букв, при этом более ранние в алфавите буквы получают меньшие номера. Назначенные номера для qiao - 4-2-1-3.
  2. Открытый текст делится на строки, каждая из которых состоит из 4 (длины ключа) букв, образуя 4 столбца:
1 2 3 4
w e l c
o m e t
o l q ,
  1. Поскольку в последней строке отсутствует буква, используется символ заполнения для ее заполнения.
  2. Порядок столбцов в матрице переставляется в алфавитном порядке ключа:
4 2 1 3
c e w l
t m o e
, l o q
  1. Затем содержимое читается по одному столбцу, получая зашифрованный текст: ct,emlwooleq.

Реализовать шифрование "Перестановка столбцов"

В этом шаге вы реализуете алгоритм шифрования "Перестановка столбцов" на Python.

Откройте файл column_permutation.py и найдите функцию column_permutation_encryption(text). Эта функция принимает кусок текста в качестве входных данных, использует ключ qiao и символ заполнения , (запятая) для выполнения шифрования перестановкой столбцов над содержимым и возвращает зашифрованный текст.

Вот код, который вам нужно реализовать:

def column_permutation_encryption(text: str) -> str:
    if not text:
        return None

    key = "qiao"
    padding_char = ","
    key_order = []
    sorted_key = sorted(key)
    for i in range(0, len(key)):
        key_order.append(sorted_key.index(key[i]))
    padded_text = text.ljust(len(key) * ((len(text) - 1) // len(key) + 1), padding_char)
    matrix = [
        padded_text[i : i + len(key)] for i in range(0, len(padded_text), len(key))
    ]
    encrypted_matrix = [[row[i] for i in key_order] for row in matrix]

    encryption_text: str = "".join(
        ["".join(column) for column in zip(*encrypted_matrix)]
    )
    return encryption_text

Рассмотрим код пошагово:

  1. Во - первых, мы проверяем, является ли входной text пустым. Если да, мы возвращаем None.
  2. Мы определяем ключ как "qiao" и символ заполнения как ",".
  3. Мы создаем список key_order, чтобы хранить алфавитный порядок букв в ключе. Мы это делаем, сначала отсортировав ключ, а затем найдя индекс каждой буквы в отсортированном ключе.
  4. Мы дополняем входной text символом padding_char, чтобы убедиться, что длина текста является кратной длине ключа.
  5. Мы создаем матрицу из дополненного текста, где каждая строка представляет собой строку текста, а каждый столбец представляет собой символ в строке.
  6. Мы переставляем столбцы матрицы в соответствии с key_order, который мы вычислили ранее.
  7. Наконец, мы читаем переставленные столбцы по одному и объединяем их, чтобы сформировать зашифрованный текст.

Протестировать шифрование "Перестановка столбцов"

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

Добавьте следующий код в конец файла column_permutation.py:

if __name__ == "__main__":
    txt = input()
    print(column_permutation_encryption(txt))

Этот код будет запрашивать у пользователя ввести кусок текста, а затем вызовет функцию column_permutation_encryption() с введенным текстом и выведет полученный зашифрованный текст.

Сохраните файл и запустите следующую команду в терминале:

python3 column_permutation.py

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

## Пример 1
text = "welcometolq"
encryption_text = "ct,emlwooleq"
## Пример 2
text = "welcometolq "
encryption_text = "ct emlwooleq"
## Пример 3
text = "w"
encryption_text = ",,w,"
## Пример 4
text = None
encryption_text = None

Поздравляем! Вы успешно реализовали алгоритм шифрования "Перестановка столбцов" на Python.

✨ Проверить решение и практиковаться

Резюме

Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.