power-girl0-0

간단한 암호화, 복호화 만들기 본문

암호 프로토콜

간단한 암호화, 복호화 만들기

power-girl0-0 2021. 3. 11. 20:41
728x90

 

간단하게 암호화, 복호화를 구현해보자.

암호화는 메시지를 거꾸로 출력해주는 것을 만들어보자.


이에 따라, 암호화와 복호화는 같은 함수를 사용한다.

따라서, 아래 소스에서는 encrypt_r함수를 통해 암호화와 복호화를 표현하였다.


 string 메시지  암호화, 복호화 하기 

 소스코드 

def encrypt_r(msg): #암호화, 복호화해주는 함수
    size = len(msg) #메시지 길이 구한다.
    enc = '' #아무 값도 안들은 enc변수를 생성한다.
    
    for i in range(size): #메시지 길이만큼 반복한다.
        enc+=msg[size-i-1] #끝에서부터 출력하기 위해 한글자씩 추출하여 enc변수에 값을 넣는다.
    
    return enc


def main():
    msg = 'I love you' # 메시지
    enc = encrypt_r(msg) # 암호화
    print(enc) 
    dec = encrypt_r(enc) # 복호화
    print(dec)
    
main()

 결과 

 


 byte 메시지  암호화, 복호화하기 

 소스코드 

파이썬에서 byte를 표현할 때는 b'문자'형식으로 표현한다.

또한, byte를 배열로 받아오고 싶을 때는 bytearray()를 사용한다.

 

같은 결과지만, 누가 소스코드를 작성하냐에 따라 작성방법은 다양하다.

그 중 두가지만 살펴보자.


방식 1. bytearray에 길이를 지정한다.

def encrypt_r(msg):
    size = len(msg)
    enc = bytearray(size) #사이즈 선언
    
    for i in range(size):
        enc[i] = msg[size-i-1]
    return enc

def main():
    
    msg = b'i love you'
    
    enc_msg = encrypt_r(msg)
    
    dec_msg = encrypt_r(enc_msg)
    
    print(msg)
    print(enc_msg)
    print(dec_msg)

main()

방식 2. bytearray에 길이를 지정하지 않는다.

리스트 추가를 도와주는 append를 사용한다.

def encrypt_r(msg):
    size = len(msg)
    enc = bytearray() #사이즈 선언을 하지 않았다.
    
    for i in range(size):
        enc.append(msg[size-i-1])
    return enc

def main():
    
    msg = b'i love you'
    
    enc_msg = encrypt_r(msg)
    
    dec_msg = encrypt_r(enc_msg)
    
    print(msg)
    print(enc_msg)
    print(dec_msg)

main()

 결과 

하지만, string으로 출력해주지 않코 타입이 byte인 것을 확인할 수 있다.

 

이때는 decode()를 사용하면 된다.

byte를 string으로 바꿀 때는 encode()를 사용하고,

stirng을 byte로 바꿀 때는 decode()를 사용한다.

 

그래서 아래와 같이 소스코드를 작성하면, string타입으로 출력할 수 있다.

def encrypt_r(msg):
    size = len(msg)
    #enc = bytearray(size)
    enc = bytearray()
    
    for i in range(size):
        #enc[i] = msg[size-i-1]
        enc.append(msg[size-i-1])
    return enc

def main():
    
    msg = b'i love you'
    
    enc_msg = encrypt_r(msg)
    
    dec_msg = encrypt_r(enc_msg)
    
    print(msg.decode())
    print(enc_msg.decode())
    print(dec_msg.decode())

main()

실제로, 암호화할 때는 바이트 타입으로 진행되니 위와 같은 방식은 알아두면 좋을 듯 하다.

 


 byte로  암호화, String으로  복호화하기 

 소스코드 

def encrypt_r(msg):
    size = len(msg)
    #enc = bytearray(size)
    enc = bytearray()
    
    for i in range(size):
        #enc[i] = msg[size-i-1]
        enc.append(msg[size-i-1])
    return enc

def main():
    
    msg = 'i love you'
    
    enc_msg = encrypt_r(msg.encode())
    dec_msg = encrypt_r(enc_msg)
    
    print(enc_msg)
    print(dec_msg.decode())

main()

 결과 

 

 

728x90

'암호 프로토콜' 카테고리의 다른 글

시저 암호(Caesar cipher) 구현하기  (0) 2021.03.11
XOR을 이용한 암호화 구현하기  (0) 2021.03.11
아나콘다 설치하기  (0) 2021.03.11
cronb 예제  (0) 2020.10.27
방화벽 관련 예제  (0) 2020.10.27
Comments