Реализация шифрования Clear Code

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

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

Введение

В этом проекте вы научитесь реализовывать простой алгоритм шифрования и дешифрования под названием "Clear Code Encryption". Этот метод шифрования использовался в раннем телеграфном коммуникационном системах Китая в конце Qing династии.

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

## Пример 1
numb = 1530; encryption_text = "0383"
## Пример 2
numb = 0; encryption_text = "9853"
## Пример 3
numb = 12345; encryption_text = None

🎯 Задачи

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

  • Как понять метод шифрования и его основные принципы
  • Как реализовать функцию plain_code_encryption(numb) для выполнения шифрования
  • Как протестировать функцию шифрования с различными входными данными
  • Как обрабатывать ввод пользователя и вызывать функцию шифрования

🏆 Достижения

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

  • Объяснить метод "Clear Code Encryption" и его историческое контекста
  • Реализовать базовый алгоритм шифрования и дешифрования с использованием Python
  • Протестировать и проверить функцию шифрования с различными сценариями входных данных
  • Интегрировать ввод и вывод пользователя в скрипт шифрования

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/BasicConceptsGroup(["Basic Concepts"]) python(("Python")) -.-> python/ControlFlowGroup(["Control Flow"]) python(("Python")) -.-> python/FunctionsGroup(["Functions"]) python(("Python")) -.-> python/PythonStandardLibraryGroup(["Python Standard Library"]) python/BasicConceptsGroup -.-> python/numeric_types("Numeric Types") python/BasicConceptsGroup -.-> python/strings("Strings") python/BasicConceptsGroup -.-> python/type_conversion("Type Conversion") python/BasicConceptsGroup -.-> python/python_shell("Python Shell") python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/FunctionsGroup -.-> python/arguments_return("Arguments and Return Values") python/PythonStandardLibraryGroup -.-> python/math_random("Math and Random") subgraph Lab Skills python/numeric_types -.-> lab-302703{{"Реализация шифрования Clear Code"}} python/strings -.-> lab-302703{{"Реализация шифрования Clear Code"}} python/type_conversion -.-> lab-302703{{"Реализация шифрования Clear Code"}} python/python_shell -.-> lab-302703{{"Реализация шифрования Clear Code"}} python/conditional_statements -.-> lab-302703{{"Реализация шифрования Clear Code"}} python/function_definition -.-> lab-302703{{"Реализация шифрования Clear Code"}} python/arguments_return -.-> lab-302703{{"Реализация шифрования Clear Code"}} python/math_random -.-> lab-302703{{"Реализация шифрования Clear Code"}} end

Разобраться с методом шифрования

В этом шаге вы узнаете о методе шифрования, используемом в проекте "Clear Code Encryption".

Метод шифрования работает следующим образом:

  1. Четыре цифры исходного кода по отдельности добавляются к четырем цифрам ключа шифрования.
  2. При сложении каждой цифры, если сумма больше или равна 10, отбрасывается 10 и остается только цифра в разряде единиц.
  3. При дешифровании из пароля вычитаются четыре цифры ключа дешифрования, чтобы получить исходный код и найти соответствующий текст.

Например, пусть исходный код - 1530, а ключ шифрования - 9853.

  1. Сложение первой цифры: 1 + 9 = 10, 10 считается за 0.
  2. Сложение второй цифры: 5 + 8 = 13, отбрасывается 10 и остается 3.
  3. Сложение третьей цифры: 3 + 5 = 8.
  4. Сложение четвертой цифры (10 + 3 = 13, отбрасывается 10 и остается 3).

Финальный зашифрованный текст - "0383".

Реализовать функцию plain_code_encryption(numb)

В этом шаге вы реализуете функцию plain_code_encryption(numb) в файле plain_code.py.

  1. Откройте файл plain_code.py в вашем редакторе кода.

  2. Найдите функцию plain_code_encryption(numb).

  3. Реализуйте функцию так, чтобы она выполняла следующие задачи:

    • Введите произвольное число от 0 до 9999 (включительно 0 и 9999), добавьте к нему 9853 и получите 4-значное число (в формате str) после сложения, а затем верните его.
    • Если введенное число имеет менее 4 цифр, заполните пропущенные позиции нулями. Например, если введено число 32, его нужно воспринимать как 0032.
    • Добавьте числа в соответствующих позициях. Если сумма больше или равна 10, отбросьте 10 и оставьте только цифру в разряде единиц.
    • Если введенное число не находится в диапазоне от 0 до 9999, верните None.

Вот полный код для функции plain_code_encryption(numb):

def plain_code_encryption(numb: int) -> str:
    if numb < 0 or numb > 9999:
        return None

    numb_str = str(numb).zfill(4)
    key_str = "9853"
    encryption_text = "".join(
        str((int(n) + int(k)) % 10) for n, k in zip(numb_str, key_str)
    )

    return encryption_text

Протестировать функцию plain_code_encryption(numb)

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

  1. Откройте файл plain_code.py в вашем редакторе кода.
  2. Добавьте следующий код в конец файла:
if __name__ == "__main__":
    print(plain_code_encryption(1530))  ## Output: "0383"
    print(plain_code_encryption(0))     ## Output: "9853"
    print(plain_code_encryption(12345)) ## Output: None
  1. Сохраните файл и запустите скрипт с помощью команды python3 plain_code.py.
  2. Проверьте, совпадает ли вывод с ожидаемыми результатами.

Обработка ввода пользователя

В этом шаге вы измените скрипт, чтобы он принимал ввод пользователя и вызывал функцию plain_code_encryption(numb) с числом, предоставленным пользователем.

  1. Откройте файл plain_code.py в вашем редакторе кода.
  2. Найдите код, который вы добавили на предыдущем шаге, и замените его на следующий:
if __name__ == "__main__":
    txt = int(input())
    print(plain_code_encryption(txt))
  1. Сохраните файл и запустите скрипт с помощью команды python3 plain_code.py.
  2. При появлении запроса введите число от 0 до 9999, и скрипт выведет зашифрованный текст.

Поздравляем! Вы завершили проект "Clear Code Encryption". Вы научились реализовать метод шифрования и тестировать его с различными входными данными.

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

Резюме

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