[목차]

 

 

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()
728x90

+ Recent posts