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

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

Введение

В этом проекте вы научитесь реализовать алгоритм шифрования Полибия. Квадрат Полибия представляет собой сетку размером 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 ввод

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

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

  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, чтобы улучшить свои навыки.

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