소개
이 프로젝트에서는 Polybius square 암호화 알고리즘을 구현하는 방법을 배우게 됩니다. Polybius square 는 영어 알파벳의 각 문자를 좌표 쌍에 매핑하는 5x5 그리드입니다. 이 방법을 사용하여 텍스트를 암호화하면 Polybius square 에 대한 지식이 있는 사람만 해독할 수 있는 암호화된 메시지를 만들 수 있습니다.
👀 미리보기
## 예시 1
text = "tynam"; encryption_text = "4454331132"
## 예시 2
text = "tynam123"; encryption_text = "4454331132123"
## 예시 3
text = "TYnam"; encryption_text = "4454331132"
## 예시 4
text = None; encryption_text = None
🎯 과제
이 프로젝트에서는 다음을 배우게 됩니다.
- Polybius square 를 정의하는 방법
- 공백을 제거하고 텍스트를 소문자로 변환하는 방법
- 빈 입력 또는
None입력을 처리하는 방법 - Polybius square 를 사용하여 텍스트를 암호화하는 방법
- 암호화된 텍스트를 반환하는 방법
🏆 성과
이 프로젝트를 완료하면 다음을 수행할 수 있습니다.
- Polybius square 암호화 알고리즘의 개념을 이해합니다.
- Python 에서 Polybius 암호화 알고리즘을 구현합니다.
- Polybius square 를 사용하여 텍스트를 암호화하고 해독합니다.
- 빈 입력 또는
None입력을 포함한 다양한 입력 시나리오를 처리합니다.
공백 제거 및 소문자로 변환
이 단계에서는 공백을 제거하고 모든 문자를 소문자로 변환하여 암호화를 위해 입력 텍스트를 준비하는 방법을 배우게 됩니다.
- 코드 편집기에서
polybius.py파일을 엽니다. polybius_encryption()함수에 다음 코드를 추가합니다.
## Remove spaces and convert to lowercase
text = text.replace(" ", "").lower()
이렇게 하면 입력 텍스트의 모든 공백이 제거되고 모든 문자가 소문자로 변환됩니다.
빈 입력 또는 None 입력 처리
이 단계에서는 입력 텍스트가 비어 있거나 None인 경우를 처리하는 방법을 배우게 됩니다.
polybius_encryption()함수의 시작 부분에 다음 코드를 추가합니다.
if text is None:
return None
if text == "":
return None
이렇게 하면 입력 텍스트가 None이거나 빈 문자열인 경우 함수가 None을 반환하도록 보장합니다.
- 이 단계를 완료한 후 코드는 다음과 같습니다.
def polybius_encryption(text: str) -> str:
if text is None:
return None
## Remove spaces and convert to lowercase
text = text.replace(" ", "").lower()
if text == "":
return None
폴리비우스 광장 설정
이 단계에서는 영어 알파벳의 26 개 문자를 포함하는 5x5 그리드인 폴리비우스 광장 (Polybius square) 을 정의하는 방법을 배우게 됩니다.
- 이전 단계를 완료한 후, 각 내부 리스트가 광장의 행을 나타내는 리스트의 리스트로 폴리비우스 광장을 정의합니다.
polybius_square = [
["a", "b", "c", "d", "e"],
["f", "g", "h", "ij", "k"],
["l", "m", "n", "o", "p"],
["q", "r", "s", "t", "u"],
["v", "w", "x", "y", "z"],
]
이 폴리비우스 광장은 입력 텍스트의 문자를 해당 좌표에 매핑하는 데 사용됩니다.
텍스트 암호화
이 단계에서는 폴리비우스 광장을 사용하여 입력 텍스트를 암호화하는 방법을 배우게 됩니다.
- 이전 단계를 완료한 후,
polybius_encryption()함수에 다음 코드를 추가합니다.
encrypted_text = ""
for char in text:
if char.isalpha():
for i, row in enumerate(polybius_square):
for j, ch in enumerate(row):
if char in ch:
encrypted_text += str(i + 1) + str(j + 1)
else:
encrypted_text += char
이 코드는 입력 텍스트의 각 문자를 반복합니다. 문자가 문자이면 폴리비우스 광장에서 해당 좌표를 찾아 encrypted_text 문자열에 추가합니다. 문자가 문자가 아니면 encrypted_text 문자열에 그대로 추가됩니다.
암호화된 텍스트 반환
이 마지막 단계에서는 polybius_encryption() 함수에서 암호화된 텍스트를 반환하는 방법을 배우게 됩니다.
polybius_encryption()함수의 끝에 다음 줄을 추가합니다.
return encrypted_text
이렇게 하면 암호화된 텍스트가 함수의 출력으로 반환됩니다.
이제 완성된 polybius_encryption() 함수는 다음과 같습니다.
def polybius_encryption(text: str) -> str:
if text is None:
return None
## Remove spaces and convert to lowercase
text = text.replace(" ", "").lower()
if text == "":
return None
## Define the Polybius square
polybius_square = [
["a", "b", "c", "d", "e"],
["f", "g", "h", "ij", "k"],
["l", "m", "n", "o", "p"],
["q", "r", "s", "t", "u"],
["v", "w", "x", "y", "z"],
]
encrypted_text = ""
for char in text:
if char.isalpha():
for i, row in enumerate(polybius_square):
for j, ch in enumerate(row):
if char in ch:
encrypted_text += str(i + 1) + str(j + 1)
else:
encrypted_text += char
return encrypted_text
if __name__ == "__main__":
txt = input()
print(polybius_encryption(txt))
이제 폴리비우스 암호화 알고리즘의 구현을 완료했습니다. polybius.py 파일을 실행하고 암호화할 입력 텍스트를 제공하여 코드를 테스트할 수 있습니다.
polybius.py파일을 실행하고 암호화할 입력 텍스트를 제공합니다.
python3 polybius.py
- 암호화된 텍스트의 출력을 확인합니다.
## Example 1
text = "tynam"; encryption_text = "4454331132"
## Example 2
text = "tynam123"; encryption_text = "4454331132123"
## Example 3
text = "TYnam"; encryption_text = "4454331132"
## Example 4
text = None; encryption_text = None
축하합니다! Python 에서 폴리비우스 암호화 알고리즘을 성공적으로 구현했습니다.
요약
축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.



