본문 바로가기
Python

르그랑 코드북 이용한 - 메시지 암호화 하기.

by 웹하는빡통 2020. 1. 16.

우리는 종종 암호 또는 암호문이라는 단어를 한번쯤 접해 보았을 것이다. 

암호: 일반 평문의 정보를 이해할 수 없도록 만드는 것이라고 생각하면 된다.

 

암호는 옛날이든 현대시대에든 정보를 보호하는데 있어 매울 핵심적인 역할을 한다.

전쟁에서도 암호는 매우 중요한 역할을 한다. 

 

지금부터 Python을 이용하여 르그랑 코드북을 이용한 메시지를 암호화 해보자.

 

르그랑: 소설 속 등장인물로써 르그랑이 구한 평문을 암호문을 만들고 다시 복호화 하여 평문을 만드는 암호방법이다.

 

소설 속 르그랑이 발견한 규칙은 아래 사진과 같다.  

르그랑이 발견한 문자 대응 규칙

이 처럼 평문의 문자와 이에 대응되는 암호문의 문자를 기록한 표를 룩업 테이블(lookup table) 또는 코드북(codebook)이라고 한다.

 

자 그럼 지금 부터 저 표를 이용하여 르그랑 코드북을 만들어 보자. 만들기 전 코드표를 현대식으로 수정을 하자.

이 부분은 컴퓨터 키보드로 표현하기 어렵기 때문에 "#,%,@,="으로 바꾸고 표에는 존재하는 않는 "공백"은 7로 표현하겠다. 

 

전체 소스코드. 

 

"Operation: Ghost 04:00 Dawn January 16 2020 A nuclear missile fires on the Korean Peninsula in Seoul."

(작전명: 고스트 내용: 2020년 1월 16일 새벽 04:00시에 서울 한반도에 핵 미사일 발사.)라는 내용을 암호화 해보자.

 

실행 결과. 

실행 결과 %=8(5;6%*: G4%); 04:00 #5w* j5*?5(: 16 2020 5 *?c085( 96))608 16(8) %* ;48 k%(85* =8*6*)?05 6* )8%?0.이라는 알 수 없는 문자로 변하였다. 
 

소스코드 설명.

makecodebook() 함수 선언하기.

makecodebook() 함수는 르그랑 코드북을 구성한다. 프로그래밍 편의를 위해 복호화를 위한 코드북(decbook)과 암호화를 위한 코드북(encbook)으로 구분하여 생성 후 return 해준다.

 

복호화를 위한 코드북을 사전 자료 decbook으로 정의한다. decbook은 (암호문자:평문문자)로 정의하고 있다. 

 

 decbook과 반대로 encbook은 (평문문자:암호문문자)로 구성된다 이는 decbook을 이용해 만들 수 있는데. decbook의 (암호문자:평문문자)에 대해 키인 암호문 문자와 값인 평문문자를 바꿔서 encbook에 추가해주면 된다.

 

encrypt(msg,encbook)

encrypt() 함수는 인자로 입력 받은 msg를 encbook을 이용하여 암호문을 생성 후 생성된 암호문을 리턴한다. 

인자로 입력된 문자열 자료 msg의 처음부터 한자씩 가져와서 변수 c에 담는다. 

 

변수 c에 담긴 문자가 encbook의 키로 존재하고 있는지 체크하고, 만약 존재하고 있으면 msg에서 변수 c에 해당하는 모든 문자를 encbook[c]로 바꿔준다. encbook[c]는 msg에서 읽은 평문문자에 대응하는 암호문 문자이다. 

 

decrypt() 함수는 인자로 입력받은 msg를 decbook을 이용해 평문으로 만들고 이 평문을 리턴해준다. 위 encrypt() 함수와 로직이 동일하다. 

 

메시지 암/복호화 하기. 

이제 마지막으로 plaintext안에있는 내용을 if__name__ == '__main__':을 이용하여 문장을 암호화하고 암호화된 문장을 다시 복호화하는 코드를 구현한다. 그러면 위 실행결과 처럼 값이 정상적으로 나온 것을 알 수 있다.  

 

댓글