[목차]
1. 간단한 암호화 과정 이해하기
2. 작업 1 - 일반 코딩
3. 작업 2 - 모듈화(함수)
4. 작업 3 - 모듈화
4. 시저 암호 이론 및 실습
[간단한 암호화 과정 이해하기]
* 평문
* 암호화 시스템(암호 알고리즘) + KEY
* 암호문
■ 리버스 암호 만들기 개요
문자열을 입력받아 역으로 출력하는 간단한 암호 프로그램 제작
[작업1] 일반 코딩
ㄱ) 첫번째 아이디어
* 문자열은 순서형 자료다.
0 1 2 3 4
a p p l e
-5 -4 -3 -2 -1
e l p p a
-1 -2 -3 -4 -5
# (1) 입력 : str(메세지)
# (2) 출력 : str(메세지)
# (3) 기능 :
# * 입력 받은 문자열을 뒤집어서 출력
plaintext = 'Three can keep a secret, if two of them are dead.'
ciphertext = ''
p_len = len(plaintext)
for i in range(1, p_len+1):
# print(i)
ciphertext = ciphertext + plaintext[-i]
print("Plaintext : ",plaintext)
print("Ciphertext : ", ciphertext)
result_text = ''
c_len = p_len
for i in range(1, c_len+1):
result_text += ciphertext[-i]
print("ResultText : ", result_text)
ㄴ) 두번째 아이디어
list.reverse()
[참고] sort(reverse=True)
str --> list : list(str)
list --> str : ''.join(list)
plaintext = 'Three can keep a secret, if two of them are dead.'
'''
cipherlist = []
for i in plaintext:
cipherlist.append(i)
print(''.join(cipherlist))
print(list(plaintext).reverse()) # None이라고 출력됨
'''
굳이 반복문 쓰지 말고 있는 기능 활용하기 (reverse함수)
plain_list = list(plaintext)
plain_list.reverse() #리스트는 원본내용을 바꾸기 때문에 출력값이 없
print(plain_list)
translated = ''.join(plain_list)
print("Plaintext:", plaintext)
print("Ciphertext: ", translated)
cipher_list = list(translated)
cipher_list.reverse()
decrypted = ''.join(cipher_list)
print("Plaintext: ", decrypted)
[작업2] 모듈화(함수)
위에 작성한 코드를 보면 중복된 부분이 보인다.
중복되는 부분을 함수화해 이를 개선하자.
def reverse_translated(msg):
# input : str(msg) : plaintext
# output : str(trans_msg) : reversetext
# function :
conv_msg = ''
m_len = len(msg)
#print(m_len)
for i in range(1, m_len+1):
conv_msg += msg[-i]
return conv_msg
plaintext = 'Three can keep a secret, if two of them are dead.'
encrypted = reverse_translated(plaintext)
decrypted = reverse_translated(encrypted)
print("Plaintext: ", plaintext)
print("Ciphertext: ", encrypted)
print("Decrypted: ", decrypted)
[작업3] 모듈화(함수) 개선
def reverse_translated(msg):
# input : str(msg) : plaintext
# output : str(trans_msg) : reversetext
# function :
conv_msg = ''
m_len = len(msg)
#print(m_len)
for i in range(1, m_len+1):
conv_msg += msg[-i]
return conv_msg
def main():
plaintext = 'Three can keep a secret, if two of them are dead.'
encrypted = reverse_translated(plaintext)
decrypted = reverse_translated(encrypted)
print("Plaintext: ", plaintext)
print("Ciphertext: ", encrypted)
print("Decrypted: ", decrypted)
if __name__ == '__main__': #함수의 순서가 바뀌어도 문제없이 실행
main()
[시저 암호 이론 및 실습]
시저 암호(Caesar Chipher)란?
시저(Caesar) 암호 = 카이사르 암호 = 케사르 암호
* 더하기 암호(Shift Cipher, Additional Cipher)
* 단순 치환(대치식) 암호 = 단일 문자 치환(Monoalphabetic Cipher)
시저암호(Caesar Cipher)
줄리어스 시저(유리우스 케사르)가 사용하였다는 암호
평문으로 사용되는 알파벳을 일정한 문자수 만큼 "평행이동" 시킴으로써 암호화
#!/usr/bin/python3
# input : str('nice to meet you')
# encryption system: caesar cipher
# key : 5
# output : str('SNHJ YT RJJY DTZ')
# make encryption and decryption book
# * encbook = {'A': 0, 'B': 1, 'C': 2, ...}
# * decbook = {0 : 'A', 1 : 'B', 2 : 'C', ...}
def main():
plaintext = 'nice to meet you'
enc,dec = makebook()
# encryption
translate()
# decryption
def translate():
# input : dict(encbook), dict(decbook), int(key)
pass
def makebook():
# input: None
# output: dict(encbook), dict(decbook)
# function: encbook, decbook을 만든다.
encbook = {}
decbook = {}
for i in range(0, 26):
print(chr(65 + i),i)
key = chr(65+i)
value = i
encbook[key] = value
decbook[value] = key
print(encbook, decbook)
return encbook, decbook
decbook= {}
if __name__ == '__main__':
main()
'정보보안공부 > 정보보안전문과정' 카테고리의 다른 글
정보보안 과정 Day78 : 암호학 3 (0) | 2020.12.28 |
---|---|
정보보안 과정 Day77 : 암호학 2 (0) | 2020.12.27 |
정보보안 과정 Day 76-1 : 암호학 이론 (0) | 2020.12.23 |
정보보안 과정 Day76 : Python 마지막 (0) | 2020.12.23 |
정보보안 과정 Day 75 : Python4 (0) | 2020.12.22 |