파이썬으로 Affine 암호화 구현하기

PythonBeginner
지금 연습하기

소개

이 프로젝트에서는 Python 으로 Affine 암호화 알고리즘을 구현하는 방법을 배우게 됩니다. Affine 암호는 시프트 암호 (shift cipher) 와 곱셈 암호 (multiplier cipher) 의 특징을 결합한 치환 암호 (substitution cipher) 의 한 유형입니다. 암호화 함수를 사용하여 문자별로 한 글자를 암호화하며, 텍스트를 암호화하고 해독하는 간단하면서도 효과적인 방법을 제공합니다.

👀 미리보기

Sample 1: welcome - > oclsaqc
Sample 2: welcome - > oclsaqc
Sample 3: Qrwe - > Qroc
Sample 4: None - > None

🎯 과제

이 프로젝트에서는 다음을 배우게 됩니다:

  • Python 에서 Affine 암호화 함수를 구현하는 방법
  • 샘플 입력을 사용하여 Affine 암호화 함수를 테스트하는 방법
  • Affine 암호화 함수를 사용하여 사용자 입력을 암호화하는 방법

🏆 성과

이 프로젝트를 완료하면 다음을 수행할 수 있습니다:

  • Affine 암호의 기본 원리를 이해합니다.
  • Python 에서 Affine 암호화 알고리즘을 구현합니다.
  • Affine 암호화 함수를 사용하여 텍스트를 암호화하고 해독합니다.
  • 다양한 입력을 사용하여 Affine 암호화 함수를 테스트합니다.

Affine 암호화 함수 구현

이 단계에서는 Python 으로 Affine 암호화 함수를 구현하는 방법을 배우게 됩니다. 이 단계를 완료하려면 아래 단계를 따르세요:

  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

설명:

  • 함수는 먼저 입력 textNone이거나 빈 문자열인지 확인합니다. 그렇다면 None을 반환합니다.
  • 그런 다음 함수는 Affine 암호화 공식에 필요한 a, b, 및 m의 값을 설정합니다.
  • 입력 text의 각 문자를 반복합니다.
  • 문자가 반각 영문자 (‘A’에서‘Z’사이 또는‘a’에서‘z’사이) 인 경우, 문자를 소문자로 변환하고, 해당 숫자 값 x를 계산하고, Affine 암호화 공식 y = (a * x + b) % m을 적용하고, 암호화된 문자를 encryption_text 문자열에 추가합니다.
  • 문자가 반각 영문자가 아닌 경우, 수정 없이 encryption_text 문자열에 추가됩니다.
  • 마지막으로, 함수는 encryption_text 문자열을 반환합니다.
  1. affine.py 파일을 저장합니다.
✨ 솔루션 확인 및 연습

Affine 암호화 함수 테스트

이 단계에서는 제공된 샘플 입력을 사용하여 affine_encryption() 함수를 테스트합니다.

  1. affine.py 파일의 끝에 다음 코드를 추가합니다:
if __name__ == "__main__":
    ## Sample 1
    text = "welcome"
    encryption_text = affine_encryption(text)
    print(f"Sample 1: {text} -> {encryption_text}")

    ## Sample 2
    text = " welcome"
    encryption_text = affine_encryption(text)
    print(f"Sample 2: {text} -> {encryption_text}")

    ## Sample 3
    text = " Qrwe"
    encryption_text = affine_encryption(text)
    print(f"Sample 3: {text} -> {encryption_text}")

    ## Sample 4
    text = None
    encryption_text = affine_encryption(text)
    print(f"Sample 4: {text} -> {encryption_text}")
  1. affine.py 파일을 저장합니다.
  2. 터미널 또는 명령 프롬프트를 열고, affine.py 파일이 있는 디렉토리로 이동하여 다음 명령을 실행합니다:
python3 affine.py

이렇게 하면 제공된 샘플 입력을 사용하여 affine_encryption() 함수가 실행되고 결과가 출력됩니다.

출력이 예상 결과와 일치하는지 확인합니다:

Sample 1: welcome -> oclsaqc
Sample 2:  welcome ->  oclsaqc
Sample 3:  Qrwe -> Qroc
Sample 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_textNone인 경우 (즉, 입력 텍스트가 비어 있는 경우), 오류 메시지를 출력합니다.
  • 그렇지 않으면 암호화된 텍스트를 출력합니다.
  1. affine.py 파일을 저장합니다.
  2. 터미널 또는 명령 프롬프트를 열고, affine.py 파일이 있는 디렉토리로 이동하여 다음 명령을 실행합니다:
python3 affine.py
  1. 메시지가 표시되면 암호화할 텍스트를 입력하고 출력을 확인합니다.

축하합니다! Affine 암호화 함수의 구현을 완료하고 다양한 입력으로 테스트했습니다.

✨ 솔루션 확인 및 연습

요약

축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.