Реализация аффинного шифрования на Python

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

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

Введение

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

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

Пример 1: welcome - > oclsaqc
Пример 2: welcome - > oclsaqc
Пример 3: Qrwe - > Qroc
Пример 4: None - > None

🎯 Задачи

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

  • Как реализовать функцию аффинного шифрования на Python
  • Как протестировать функцию аффинного шифрования с примерными входными данными
  • Как зашифровать ввод пользователя с использованием функции аффинного шифрования

🏆 Достижения

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

  • Разобраться в основных принципах аффинного шифра
  • Реализовать алгоритм аффинного шифрования на 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/BasicConceptsGroup -.-> python/strings("Strings") python/ControlFlowGroup -.-> python/conditional_statements("Conditional Statements") python/ControlFlowGroup -.-> python/for_loops("For Loops") python/FunctionsGroup -.-> python/function_definition("Function Definition") python/FunctionsGroup -.-> python/arguments_return("Arguments and Return Values") subgraph Lab Skills python/strings -.-> lab-302685{{"Реализация аффинного шифрования на Python"}} python/conditional_statements -.-> lab-302685{{"Реализация аффинного шифрования на Python"}} python/for_loops -.-> lab-302685{{"Реализация аффинного шифрования на Python"}} python/function_definition -.-> lab-302685{{"Реализация аффинного шифрования на Python"}} python/arguments_return -.-> lab-302685{{"Реализация аффинного шифрования на Python"}} end

Реализовать функцию аффинного шифрования

В этом шаге вы научитесь реализовывать функцию аффинного шифрования на Python. Следуйте шагам ниже, чтобы завершить этот шаг:

  1. Откройте файл affine.py в вашем текстовом редакторе.
  2. Внутри функции affine_encryption(text) добавьте следующий код:
def affine_encryption(text: str) -> str:
    if text is None or text == "":
        return None

    a = 5
    b = 8
    m = 26
    encryption_text = ""

    for char in text:
        if "A" <= char <= "Z" or "a" <= char <= "z":
            char = char.lower()
            x = ord(char) - ord("a")
            y = (a * x + b) % m
            encryption_text += chr(y + ord("a"))
        else:
            encryption_text += char

    return encryption_text

Пояснение:

  • Функция сначала проверяет, является ли входной параметр text равным None или пустой строкой. Если да, то возвращается None.
  • Затем функция устанавливает значения a, b и m в соответствии с формулой аффинного шифрования.
  • Затем она перебирает каждый символ в входной строке text.
  • Если символ является латинской буквой (от 'A' до 'Z' или от 'a' до 'z'), то он переводится в нижний регистр, вычисляется соответствующее числовое значение x, применяется формула аффинного шифрования y = (a * x + b) % m, и зашифрованный символ добавляется в строку encryption_text.
  • Если символ не является латинской буквой, то он добавляется в строку encryption_text без изменений.
  • Наконец, функция возвращает строку encryption_text.
  1. Сохраните файл affine.py.

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

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

  1. В файле affine.py добавьте следующий код в конец файла:
if __name__ == "__main__":
    ## Пример 1
    text = "welcome"
    encryption_text = affine_encryption(text)
    print(f"Пример 1: {text} -> {encryption_text}")

    ## Пример 2
    text = " welcome"
    encryption_text = affine_encryption(text)
    print(f"Пример 2: {text} -> {encryption_text}")

    ## Пример 3
    text = " Qrwe"
    encryption_text = affine_encryption(text)
    print(f"Пример 3: {text} -> {encryption_text}")

    ## Пример 4
    text = None
    encryption_text = affine_encryption(text)
    print(f"Пример 4: {text} -> {encryption_text}")
  1. Сохраните файл affine.py.
  2. Откройте терминал или командную строку, перейдите в директорию, содержащую файл affine.py, и выполните следующую команду:
python3 affine.py

Это выполнит функцию affine_encryption() с предоставленными примерами входных данных и выведет результаты.

Проверьте, совпадает ли вывод с ожидаемыми результатами:

Пример 1: welcome -> oclsaqc
Пример 2:  welcome ->  oclsaqc
Пример 3:  Qrwe -> Qroc
Пример 4: None -> None

Если вывод совпадает с ожидаемыми результатами, ваша функция affine_encryption() работает правильно.

Шифровать ввод пользователя

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

  1. В файле affine.py замените существующий код в конце файла (то есть if __name__ == "__main__": и последующую часть) на следующий код:
if __name__ == "__main__":
    text = input("Enter the text to encrypt: ")
    encryption_text = affine_encryption(text)
    if encryption_text is None:
        print("Error: Input text is empty.")
    else:
        print(f"Encrypted text: {encryption_text}")

Пояснение:

  • Код запрашивает у пользователя текст для шифрования.
  • Затем он вызывает функцию affine_encryption() с вводом пользователя и сохраняет результат в переменной encryption_text.
  • Если encryption_text равен None (что означает, что вводной текст был пустым), то выводится сообщение об ошибке.
  • В противном случае выводится зашифрованный текст.
  1. Сохраните файл affine.py.
  2. Откройте терминал или командную строку, перейдите в директорию, содержащую файл affine.py, и выполните следующую команду:
python3 affine.py
  1. При появлении запроса введите текст для шифрования и изучите вывод.

Поздравляем! Вы завершили реализацию функции аффинного шифрования и протестировали ее с различными входными данными.

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

Резюме

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