소개
이 프로젝트에서는 Python 으로 Column Permutation Encryption 알고리즘을 구현하는 방법을 배우게 됩니다. Column Permutation Encryption 은 키워드를 기반으로 입력 텍스트로 구성된 행렬의 열을 재배열하여 평문을 암호화하는 방법입니다.
👀 미리보기
## Sample 1
text = "welcometolq"; encryption_text = "ct,emlwooleq"
## Sample 2
text = "welcometolq "; encryption_text = "ct emlwooleq"
## Sample 3
text = "w"; encryption_text = ",,w,"
## Sample 4
text = None; encryption_text = None
🎯 과제
이 프로젝트에서는 다음을 배우게 됩니다:
- Column Permutation Encryption 의 기본 개념
- Python 에서 Column Permutation Encryption 알고리즘을 구현하는 방법
- 샘플 입력을 사용하여 암호화 알고리즘을 테스트하는 방법
🏆 성과
이 프로젝트를 완료하면 다음을 수행할 수 있습니다:
- Column Permutation Encryption 의 원리를 이해합니다.
- Python 에서 Column Permutation Encryption 알고리즘을 구현합니다.
- Column Permutation Encryption 방법을 사용하여 텍스트를 암호화하고 해독합니다.
Column Permutation 암호화 이해하기
이 단계에서는 Column Permutation Encryption 의 기본 개념과 작동 방식을 배우게 됩니다.
Column Permutation Encryption 은 고정된 수의 문자 (키에 있는 고유 문자의 수, 일반적으로 중복된 문자가 없는 단어) 를 사용하여 줄 단위로 평문을 작성하여 암호화하는 방법입니다. 마지막 줄의 문자 수가 줄당 고정된 문자 수보다 적으면 특수 기호를 사용하여 줄을 채워 행렬을 형성합니다. 그런 다음, 행렬의 열은 키의 문자의 알파벳 순서에 따라 재배열됩니다. 마지막으로, 재배열된 열을 하나씩 읽어 암호문을 생성합니다.
예를 들어, 다음 평문, 키 및 패딩 문자를 고려해 보겠습니다.
평문: welcometolq
키: qiao
패딩 문자: ,
- 키
qiao의 길이는 4 입니다. 그런 다음 키는 26 개의 영어 문자의 알파벳 순서로 숫자가 할당되며, 순서상 먼저 나타나는 문자에 더 낮은 숫자가 할당됩니다.qiao에 할당된 숫자는 4-2-1-3 입니다. - 평문은 각 줄이 4 개의 문자 (키의 길이) 로 구성된 줄로 나뉘어 4 개의 열을 생성합니다.
| 1 | 2 | 3 | 4 |
|---|---|---|---|
| w | e | l | c |
| o | m | e | t |
| o | l | q | , |
- 마지막 줄에 문자가 없으므로 패딩 문자를 사용하여 채웁니다.
- 행렬의 열 순서는 키의 알파벳 순서에 따라 재배열됩니다.
| 4 | 2 | 1 | 3 |
|---|---|---|---|
| c | e | w | l |
| t | m | o | e |
| , | l | o | q |
- 그런 다음 내용을 한 번에 한 열씩 읽어 암호문
ct,emlwooleq를 생성합니다.
Column Permutation 암호화 구현하기
이 단계에서는 Python 으로 Column Permutation Encryption 알고리즘을 구현합니다.
column_permutation.py 파일을 열고 column_permutation_encryption(text) 함수를 찾습니다. 이 함수는 텍스트를 입력으로 받아 키 qiao와 패딩 문자 , (쉼표) 를 사용하여 내용에 대한 열 순열 암호화를 수행하고 암호문을 반환합니다.
구현해야 할 코드는 다음과 같습니다.
def column_permutation_encryption(text: str) -> str:
if not text:
return None
key = "qiao"
padding_char = ","
key_order = []
sorted_key = sorted(key)
for i in range(0, len(key)):
key_order.append(sorted_key.index(key[i]))
padded_text = text.ljust(len(key) * ((len(text) - 1) // len(key) + 1), padding_char)
matrix = [
padded_text[i : i + len(key)] for i in range(0, len(padded_text), len(key))
]
encrypted_matrix = [[row[i] for i in key_order] for row in matrix]
encryption_text: str = "".join(
["".join(column) for column in zip(*encrypted_matrix)]
)
return encryption_text
코드를 단계별로 살펴보겠습니다.
- 먼저 입력
text가 비어 있는지 확인합니다. 비어 있으면None을 반환합니다. key를"qiao"로,padding_char를","로 정의합니다.- 키의 문자의 알파벳 순서를 저장하기 위해
key_order리스트를 생성합니다. 이를 위해 먼저 키를 정렬한 다음 정렬된 키에서 각 문자의 인덱스를 찾습니다. - 입력
text를padding_char로 채워 텍스트의 길이가 키의 길이의 배수가 되도록 합니다. - 채워진 텍스트에서 행렬을 생성합니다. 여기서 각 행은 텍스트의 한 줄을 나타내고 각 열은 줄의 문자를 나타냅니다.
- 이전에 계산한
key_order에 따라 행렬의 열을 재배열합니다. - 마지막으로 재배열된 열을 하나씩 읽고 연결하여 암호문을 형성합니다.
Column Permutation 암호화 테스트
Column Permutation Encryption 알고리즘을 구현했으므로 몇 가지 샘플 입력을 사용하여 테스트해 보겠습니다.
column_permutation.py 파일의 끝에 다음 코드를 추가합니다.
if __name__ == "__main__":
txt = input()
print(column_permutation_encryption(txt))
이 코드는 사용자에게 텍스트를 입력하라는 메시지를 표시한 다음 입력 텍스트로 column_permutation_encryption() 함수를 호출하고 결과 암호문을 출력합니다.
파일을 저장하고 터미널에서 다음 명령을 실행합니다.
python3 column_permutation.py
몇 가지 샘플 텍스트를 입력하고 결과 암호문을 관찰합니다. 원래 챌린지에서 제공된 예제를 참조로 사용할 수 있습니다.
## Sample 1
text = "welcometolq"
encryption_text = "ct,emlwooleq"
## Sample 2
text = "welcometolq "
encryption_text = "ct emlwooleq"
## Sample 3
text = "w"
encryption_text = ",,w,"
## Sample 4
text = None
encryption_text = None
축하합니다! Python 에서 Column Permutation Encryption 알고리즘을 성공적으로 구현했습니다.
요약
축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.



