소개
이 프로젝트에서는 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 암호화 함수를 구현하는 방법을 배우게 됩니다. 이 단계를 완료하려면 아래 단계를 따르세요:
- 텍스트 편집기에서
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을 반환합니다. - 그런 다음 함수는 Affine 암호화 공식에 필요한
a,b, 및m의 값을 설정합니다. - 입력
text의 각 문자를 반복합니다. - 문자가 반각 영문자 (‘A’에서‘Z’사이 또는‘a’에서‘z’사이) 인 경우, 문자를 소문자로 변환하고, 해당 숫자 값
x를 계산하고, Affine 암호화 공식y = (a * x + b) % m을 적용하고, 암호화된 문자를encryption_text문자열에 추가합니다. - 문자가 반각 영문자가 아닌 경우, 수정 없이
encryption_text문자열에 추가됩니다. - 마지막으로, 함수는
encryption_text문자열을 반환합니다.
affine.py파일을 저장합니다.
Affine 암호화 함수 테스트
이 단계에서는 제공된 샘플 입력을 사용하여 affine_encryption() 함수를 테스트합니다.
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}")
affine.py파일을 저장합니다.- 터미널 또는 명령 프롬프트를 열고,
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() 함수를 사용하여 암호화할 수 있도록 합니다.
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
- 메시지가 표시되면 암호화할 텍스트를 입력하고 출력을 확인합니다.
축하합니다! Affine 암호화 함수의 구현을 완료하고 다양한 입력으로 테스트했습니다.
요약
축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.



