Введение
В этом проекте вы научитесь реализовывать алгоритм аффинного шифрования на Python. Аффинный шифр - это тип подстановочного шифра, который сочетает в себе характеристики сдвигового шифра и умножительного шифра. Он использует криптографическую функцию для шифрования по одной букве за раз, обеспечивая простой, но эффективный способ шифрования и дешифрования текста.
👀 Предварительный просмотр
Пример 1: welcome - > oclsaqc
Пример 2: welcome - > oclsaqc
Пример 3: Qrwe - > Qroc
Пример 4: None - > None
🎯 Задачи
В этом проекте вы научитесь:
- Как реализовать функцию аффинного шифрования на Python
- Как протестировать функцию аффинного шифрования с примерными входными данными
- Как зашифровать ввод пользователя с использованием функции аффинного шифрования
🏆 Достижения
После завершения этого проекта вы сможете:
- Разобраться в основных принципах аффинного шифра
- Реализовать алгоритм аффинного шифрования на Python
- Шифровать и дешифровать текст с использованием функции аффинного шифрования
- Протестировать функцию аффинного шифрования с различными входными данными
Реализовать функцию аффинного шифрования
В этом шаге вы научитесь реализовывать функцию аффинного шифрования на Python. Следуйте шагам ниже, чтобы завершить этот шаг:
- Откройте файл
affine.pyв вашем текстовом редакторе. - Внутри функции
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.
- Сохраните файл
affine.py.
Тестировать функцию аффинного шифрования
В этом шаге вы протестируете функцию affine_encryption() с предоставленными примерами входных данных.
- В файле
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}")
- Сохраните файл
affine.py. - Откройте терминал или командную строку, перейдите в директорию, содержащую файл
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().
- В файле
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(что означает, что вводной текст был пустым), то выводится сообщение об ошибке. - В противном случае выводится зашифрованный текст.
- Сохраните файл
affine.py. - Откройте терминал или командную строку, перейдите в директорию, содержащую файл
affine.py, и выполните следующую команду:
python3 affine.py
- При появлении запроса введите текст для шифрования и изучите вывод.
Поздравляем! Вы завершили реализацию функции аффинного шифрования и протестировали ее с различными входными данными.
Резюме
Поздравляем! Вы завершили этот проект. Вы можете практиковаться в более многих лабораторных работах в LabEx, чтобы улучшить свои навыки.



