Theory/Cipher protocol

시저암호

D4tai1 2019. 3. 19.

1. 시저암호

▶ 고전암호의 일종으로 굉장히 간단한 암호종류 중 하나이다.

 

(1) 정의

 ▶ 왼쪽이나 오른쪽으로 key만큼 밀어서 암호화한다.

 ▶ 복호화는 암호화를 반대로 진행하면 된다.

 ▶ 단, key는 동일해야 한다.

 

(2) 암호화

 [1] 소스

def enc(msg, k): 	table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 	rmsg = ''  	for x in msg: 		if x in table: 			index = table.find(x) 			index += k  			if len(msg) <= index: 				index = index - len(table) 			x = table[index]  		rmsg = rmsg + x  	return rmsg  def main(): 	msg = 'THIS IS MY SECRET MESSAGE.' 	key = 13  	print('Result', enc(msg, key), sep=' = ')  if __name__ == '__main__': 	main() 

 

 [2] 시연

 

(3) 시저암호 패스워드 크랙

 ▶ 암호 알고리즘 자체가 단순하기 때문에 특별한 지식없이 모든 경우의 수 25번을 슬라이싱하는 방식으로 시도해 보려고 한다.

 [1] 소스

def dec(rmsg, k): 	table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 	msg = ''  	for x in rmsg: 		if x in table: 			index = table.find(x) 			index -= k  			if index < 0: 				index += len(table) 			 			x = table[index]	 		msg = msg + x 	 	return msg  def main(): 	rmsg = 'GUVF VF ZL FRPERG ZRFFNTR.' 		 	for key in range(1, 26): 		print(key, dec(rmsg, key), sep='. ')  if __name__ == '__main__': 	main() 

 

 [2] 시연

 

(4) 추가지식

 ▶ 위에서 13번째라인이 원본 메세지인 것을 알 수 있다.

 ▶ upper(), lower()함수를 이용해서 대소문자 모두 가능하도록 작성할 수 있다.

 ▶ 그러나 사람이 직접 찾아야 하는 불편함이 있다.

 ▶ 추후 의미가 있는 단어가 있는 내용만 출력해주는 방식으로 작성하면 좋을 듯 싶다.

 

댓글