Theory/Cipher protocol
시저암호
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()함수를 이용해서 대소문자 모두 가능하도록 작성할 수 있다.
▶ 그러나 사람이 직접 찾아야 하는 불편함이 있다.
▶ 추후 의미가 있는 단어가 있는 내용만 출력해주는 방식으로 작성하면 좋을 듯 싶다.
'Theory > Cipher protocol' 카테고리의 다른 글
Ciphertext Only Attack(암호문 단독 공격) 구현 (0) | 2019.05.31 |
---|---|
Known Plaintext Attack(기지 평문 공격) 구현 (0) | 2019.05.31 |
RSA를 이용한 전자서명(디지털서명) 구현 (0) | 2019.05.31 |
RSA공개키를 이용한 암호화 구현 (0) | 2019.05.30 |
3DES를 이용한 암호화 (0) | 2019.04.11 |
댓글