Python 을 이용한 폴리비우스 사각형 암호화

PythonBeginner
지금 연습하기

소개

이 프로젝트에서는 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 입력을 포함한 다양한 입력 시나리오를 처리합니다.

공백 제거 및 소문자로 변환

이 단계에서는 공백을 제거하고 모든 문자를 소문자로 변환하여 암호화를 위해 입력 텍스트를 준비하는 방법을 배우게 됩니다.

  1. 코드 편집기에서 polybius.py 파일을 엽니다.
  2. polybius_encryption() 함수에 다음 코드를 추가합니다.
## Remove spaces and convert to lowercase
text = text.replace(" ", "").lower()

이렇게 하면 입력 텍스트의 모든 공백이 제거되고 모든 문자가 소문자로 변환됩니다.

빈 입력 또는 None 입력 처리

이 단계에서는 입력 텍스트가 비어 있거나 None인 경우를 처리하는 방법을 배우게 됩니다.

  1. polybius_encryption() 함수의 시작 부분에 다음 코드를 추가합니다.
if text is None:
    return None

if text == "":
    return None

이렇게 하면 입력 텍스트가 None이거나 빈 문자열인 경우 함수가 None을 반환하도록 보장합니다.

  1. 이 단계를 완료한 후 코드는 다음과 같습니다.
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) 을 정의하는 방법을 배우게 됩니다.

  1. 이전 단계를 완료한 후, 각 내부 리스트가 광장의 행을 나타내는 리스트의 리스트로 폴리비우스 광장을 정의합니다.
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"],
]

이 폴리비우스 광장은 입력 텍스트의 문자를 해당 좌표에 매핑하는 데 사용됩니다.

텍스트 암호화

이 단계에서는 폴리비우스 광장을 사용하여 입력 텍스트를 암호화하는 방법을 배우게 됩니다.

  1. 이전 단계를 완료한 후, 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() 함수에서 암호화된 텍스트를 반환하는 방법을 배우게 됩니다.

  1. 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 파일을 실행하고 암호화할 입력 텍스트를 제공하여 코드를 테스트할 수 있습니다.

  1. polybius.py 파일을 실행하고 암호화할 입력 텍스트를 제공합니다.
python3 polybius.py
  1. 암호화된 텍스트의 출력을 확인합니다.
## 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 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.

✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습✨ 솔루션 확인 및 연습