Реализация и тестирование шифрования Книги Юйна

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

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

Введение

В этом проекте вы научитесь реализовывать алгоритм шифрования "Книга Юйна", метод разделения полного сообщения на три части и передачи их отдельно получателю. Эта техника шифрования использовалась в древности для предотвращения утечки информации, даже если один из посланников был пойман врагом.

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

## Пример 1

## Пример 2

## Пример 3

## Пример 4

🎯 Задачи

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

  • Как реализовать функцию yin_book_encryption для разделения заданного текста на несколько частей в соответствии с правилом шифрования "Книга Юйна".
  • Как протестировать функцию yin_book_encryption с разными примерами ввода.
  • Как понять реализацию функции yin_book_encryption и вспомогательной функции calculate_length.

🏆 Достижения

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

  • Разобраться в концепции алгоритма шифрования "Книга Юйна".
  • Реализовать функцию yin_book_encryption для шифрования и дешифрования сообщений.
  • Протестировать функцию yin_book_encryption в различных сценариях ввода.
  • Изменить функцию yin_book_encryption чтобы соответствовать вашим конкретным требованиям.

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/DataStructuresGroup(["Data Structures"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/FileHandlingGroup(["File Handling"]) python/BasicConceptsGroup -.-> python/strings("Strings") python/ControlFlowGroup -.-> python/while_loops("While Loops") python/DataStructuresGroup -.-> python/lists("Lists") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/FileHandlingGroup -.-> python/file_reading_writing("Reading and Writing Files") subgraph Lab Skills python/strings -.-> lab-302786{{"Реализация и тестирование шифрования Книги Юйна"}} python/while_loops -.-> lab-302786{{"Реализация и тестирование шифрования Книги Юйна"}} python/lists -.-> lab-302786{{"Реализация и тестирование шифрования Книги Юйна"}} python/function_definition -.-> lab-302786{{"Реализация и тестирование шифрования Книги Юйна"}} python/file_reading_writing -.-> lab-302786{{"Реализация и тестирование шифрования Книги Юйна"}} end

Реализовать функцию yin_book_encryption

В этом шаге вы реализуете функцию yin_book_encryption в файле yin_book.py, чтобы достичь требуемой функциональности.

  1. Откройте файл yin_book.py в предпочитаемом редакторе кода.

  2. Реализуйте функцию yin_book_encryption в соответствии с требованиями:

    • Функция должна принимать строку text в качестве входных данных и возвращать список зашифрованных частей.
    • Длина первой части должна быть равна 1, второй части — 1 + 2, третьей части — 1 + 2 + 3 и так далее, пока текст не будет полностью разделен.
    • Если входной текст пуст, функция должна вернуть None.
    • Пробел считается за один символ.

Вот код, который вы можете использовать для реализации функции yin_book_encryption:

def yin_book_encryption(text: str) -> list:
    """
    Шифрует заданный текст в соответствии с правилом шифрования "Книга Юйна".

    Аргументы:
        text (str): Текст, который нужно зашифровать.

    Возвращает:
        list: Список зашифрованных частей текста.

    """

    def calculate_length(index):
        """
        Вычисляет длину каждой части на основе заданного индекса.

        Аргументы:
            index (int): Индекс части.

        Возвращает:
            int: Длина части.

        """
        return index * (index + 1) // 2

    if not text:
        return None

    encryption_text = []
    i = 0
    index = 1

    while i < len(text):
        part_length = calculate_length(index)
        sub_text = text[i : i + part_length]
        encryption_text.append(sub_text)
        i += part_length
        index += 1

    return encryption_text

Протестировать функцию yin_book_encryption

В этом шаге вы протестируете функцию yin_book_encryption с помощью предоставленных примеров.

  1. Откройте файл yin_book.py в редакторе кода.
  2. Добавьте следующий код в конец файла, чтобы протестировать функцию yin_book_encryption:
## Пример 1
text = "Hello, World!"
print(yin_book_encryption(text))

## Пример 2
text = "!@#$%^&*) Hello, World!"
print(yin_book_encryption(text))

## Пример 3
text = "None"
print(yin_book_encryption(text))

## Пример 4
text = ''
print(yin_book_encryption(text))
  1. Сохраните файл yin_book.py и запустите код в терминале с помощью команды python yin_book.py. Вывод должен быть таким:
['H', 'ell', 'o, Wor', 'ld!']
['!', '@#$', '%^&*) ', 'Hello, Wor', 'ld!']
['N', 'one']
None

Вывод соответствует ожидаемым результатам, что означает, что функция yin_book_encryption работает как ожидается.

Разобраться с функцией yin_book_encryption

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

  1. Функция yin_book_encryption принимает строку text в качестве входных данных и возвращает список зашифрованных частей.

  2. Функция calculate_length — это вспомогательная функция, которая вычисляет длину каждой части на основе заданного индекса. Длина n-й части составляет 1 + 2 + 3 +... + n.

  3. Функция сначала проверяет, является ли входной text пустым. Если да, функция возвращает None.

  4. Затем функция инициализирует пустой список encryption_text для хранения зашифрованных частей.

  5. Функция использует цикл while для перебора text и разделения его на части. В каждой итерации:

    • Функция вычисляет длину текущей части с использованием функции calculate_length.
    • Функция извлекает текущую часть из text с использованием среза и добавляет ее в список encryption_text.
    • Функция обновляет начальный индекс i и индекс части index для следующей итерации.
  6. Наконец, функция возвращает список encryption_text, содержащий зашифрованные части.

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

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

Резюме

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