Введение
В этом проекте вы научитесь реализовывать алгоритм шифрования "Перестановка столбцов" на 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
- Шифровать и дешифровать текст с использованием метода шифрования "Перестановка столбцов"
Разобраться с шифрованием перестановки столбцов
В этом шаге вы научитесь основным понятиям шифрования "Перестановка столбцов" и понять, как он работает.
Шифрование "Перестановка столбцов" - это метод шифрования открытого текста путем записи его по строкам с фиксированным количеством символов в каждой строке (количество уникальных букв в ключе, который обычно является словом без повторяющихся букв). Если количество символов в последней строке меньше фиксированного количества символов в строке, используются специальные символы для заполнения строки, образуя матрицу. Затем столбцы матрицы переставляются в алфавитном порядке букв в ключе. Наконец, переставленные столбцы читаются по одному, получая зашифрованный текст.
Например, рассмотрим следующий открытый текст, ключ и символ заполнения:
Открытый текст: welcometolq
Ключ: qiao
Символ заполнения: ,
- Длина ключа
qiaoравна 4. Затем ключу назначаются номера в алфавитном порядке 26 английских букв, при этом более ранние в алфавите буквы получают меньшие номера. Назначенные номера дляqiao- 4-2-1-3. - Открытый текст делится на строки, каждая из которых состоит из 4 (длины ключа) букв, образуя 4 столбца:
| 1 | 2 | 3 | 4 |
|---|---|---|---|
| w | e | l | c |
| o | m | e | t |
| o | l | q | , |
- Поскольку в последней строке отсутствует буква, используется символ заполнения для ее заполнения.
- Порядок столбцов в матрице переставляется в алфавитном порядке ключа:
| 4 | 2 | 1 | 3 |
|---|---|---|---|
| c | e | w | l |
| t | m | o | e |
| , | l | o | q |
- Затем содержимое читается по одному столбцу, получая зашифрованный текст:
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
Рассмотрим код пошагово:
- Во - первых, мы проверяем, является ли входной
textпустым. Если да, мы возвращаемNone. - Мы определяем
ключкак"qiao"исимвол заполнениякак",". - Мы создаем список
key_order, чтобы хранить алфавитный порядок букв в ключе. Мы это делаем, сначала отсортировав ключ, а затем найдя индекс каждой буквы в отсортированном ключе. - Мы дополняем входной
textсимволомpadding_char, чтобы убедиться, что длина текста является кратной длине ключа. - Мы создаем матрицу из дополненного текста, где каждая строка представляет собой строку текста, а каждый столбец представляет собой символ в строке.
- Мы переставляем столбцы матрицы в соответствии с
key_order, который мы вычислили ранее. - Наконец, мы читаем переставленные столбцы по одному и объединяем их, чтобы сформировать зашифрованный текст.
Тестировать шифрование перестановки столбцов
Теперь, когда вы реализовали алгоритм шифрования "Перестановка столбцов", давайте протестируем его с некоторыми примерами входных данных.
Добавьте следующий код в конец файла 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, чтобы улучшить свои навыки.



