Шифрование с использованием квадрата Полибия на Python

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

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

Введение

В этом проекте вы научитесь реализовать алгоритм шифрования Полибия. Квадрат Полибия представляет собой сетку размером 5x5, которая сопоставляет каждую букву английского алфавита паре координат. Шифруя текст с использованием этого метода, вы можете создать закодированное сообщение, которое может быть расшифровано только тем, кто знает квадрат Полибия.

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

## Example 1
text = "tynam"; encryption_text = "4454331132"
## Example 2
text = "tynam123"; encryption_text = "4454331132123"
## Example 3
text = "TYnam"; encryption_text = "4454331132"
## Example 4
text = None; encryption_text = None

🎯 Задачи

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

  • Определять квадрат Полибия
  • Удалять пробелы и преобразовывать текст в нижний регистр
  • Обрабатывать пустой или None ввод
  • Шифровать текст с использованием квадрата Полибия
  • Возвращать зашифрованный текст

🏆 Достижения

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

  • Понять концепцию алгоритма шифрования Полибия
  • Реализовать алгоритм шифрования Полибия на Python
  • Шифровать и расшифровывать текст с использованием квадрата Полибия
  • Обрабатывать различные сценарии ввода, включая пустой или None ввод

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python/BasicConceptsGroup -.-> python/strings("Strings") python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/ControlFlowGroup -.-> python/for_loops("For Loops") python/DataStructuresGroup -.-> python/lists("Lists") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/PythonStandardLibraryGroup -.-> python/data_collections("Data Collections") subgraph Lab Skills python/strings -.-> lab-302701{{"Шифрование с использованием квадрата Полибия на Python"}} python/conditional_statements -.-> lab-302701{{"Шифрование с использованием квадрата Полибия на Python"}} python/for_loops -.-> lab-302701{{"Шифрование с использованием квадрата Полибия на Python"}} python/lists -.-> lab-302701{{"Шифрование с использованием квадрата Полибия на Python"}} python/function_definition -.-> lab-302701{{"Шифрование с использованием квадрата Полибия на Python"}} python/data_collections -.-> lab-302701{{"Шифрование с использованием квадрата Полибия на Python"}} end

Удаление пробелов и преобразование в нижний регистр

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

  1. Откройте файл polybius.py в вашем редакторе кода.
  2. Добавьте следующий код в функцию polybius_encryption():
## Remove spaces and convert to lowercase
text = text.replace(" ", "").lower()

Это удалит все пробелы во входном тексте и преобразует все символы в нижний регистр.

Обработка пустого или None ввода

На этом этапе вы научитесь обрабатывать случай, когда входной текст пуст или равен None.

  1. Добавьте следующий код в начало функции polybius_encryption():
if text is None:
    return None

if text == "":
    return None

Это обеспечит возврат None функцией, если входной текст равен None или является пустой строкой.

  1. После завершения этого этапа код будет выглядеть следующим образом:
def polybius_encryption(text: str) -> str:
    if text is None:
        return None

    ## Remove spaces and convert to lowercase
    text = text.replace(" ", "").lower()

    if text == "":
        return None

Создание квадрата Полибия

На этом этапе вы научитесь определять квадрат Полибия, который представляет собой сетку размером 5x5, содержащую 26 букв английского алфавита.

  1. После предыдущих этапов определите квадрат Полибия в виде списка списков, где каждый вложенный список представляет строку квадрата:
polybius_square = [
    ["a", "b", "c", "d", "e"],
    ["f", "g", "h", "ij", "k"],
    ["l", "m", "n", "o", "p"],
    ["q", "r", "s", "t", "u"],
    ["v", "w", "x", "y", "z"],
]

Этот квадрат Полибия будет использоваться для сопоставления букв входного текста их соответствующим координатам.

Шифрование текста

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

  1. После предыдущих этапов добавьте следующий код в функцию polybius_encryption():
encrypted_text = ""

for char in text:
    if char.isalpha():
        for i, row in enumerate(polybius_square):
            for j, ch in enumerate(row):
                if char in ch:
                    encrypted_text += str(i + 1) + str(j + 1)
    else:
        encrypted_text += char

Этот код проходит по каждому символу во входном тексте. Если символ является буквой, он находит соответствующие координаты в квадрате Полибия и добавляет их к строке encrypted_text. Если символ не является буквой, он добавляется в строку encrypted_text без изменений.

Возвращение зашифрованного текста

На этом последнем этапе вы научитесь возвращать зашифрованный текст из функции polybius_encryption().

  1. Добавьте следующую строку в конец функции polybius_encryption():
return encrypted_text

Это обеспечит возврат зашифрованного текста в качестве результата работы функции.

Теперь полная функция polybius_encryption() должна выглядеть следующим образом:

def polybius_encryption(text: str) -> str:
    if text is None:
        return None

    ## Remove spaces and convert to lowercase
    text = text.replace(" ", "").lower()

    if text == "":
        return None

    ## Define the Polybius square
    polybius_square = [
        ["a", "b", "c", "d", "e"],
        ["f", "g", "h", "ij", "k"],
        ["l", "m", "n", "o", "p"],
        ["q", "r", "s", "t", "u"],
        ["v", "w", "x", "y", "z"],
    ]

    encrypted_text = ""

    for char in text:
        if char.isalpha():
            for i, row in enumerate(polybius_square):
                for j, ch in enumerate(row):
                    if char in ch:
                        encrypted_text += str(i + 1) + str(j + 1)
        else:
            encrypted_text += char

    return encrypted_text


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

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

  1. Запустите файл polybius.py и введите текст для шифрования.
python3 polybius.py
  1. Посмотрите на вывод зашифрованного текста.
## Example 1
text = "tynam"; encryption_text = "4454331132"
## Example 2
text = "tynam123"; encryption_text = "4454331132123"
## Example 3
text = "TYnam"; encryption_text = "4454331132"
## Example 4
text = None; encryption_text = None

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

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

Итог

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