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()함수를 이용해서 대소문자 모두 가능하도록 작성할 수 있다.