관리 메뉴

솜씨좋은장씨

[Python] Python과 cryptography를 통해 대칭키 암호화 하기! 본문

Programming/Python

[Python] Python과 cryptography를 통해 대칭키 암호화 하기!

솜씨좋은장씨 2020. 4. 7. 13:37
728x90
반응형

Python에서는 다양한 방법을 통해 암호화 관련 알고리즘을 구현할 수 있습니다.

 

그 중 cryptography의 Fernet을 활용한 대칭키 암호화 알고리즘을 해보려합니다.

 

대칭키 암호화 방식

먼저 대칭키 암호화 방식 ( symmetric-key algorithm)은 

암호화와 복호화에 같은 암호키를 사용하는 알고리즘 입니다.

 

이에 암호화를 하는 측과 복호화를 하는 측이 같은 암호키를 공유해야합니다.

 

공개키 암호화 방식에 비하여 계산 속도가 빠르다는 장점이 있습니다.

 

공개키 암호화 방식

공개키와 비밀키 두가지의 키가 존재하며

공개키는 누구나 알 수 있지만 그에 대응하는 비밀키는 키의 소유자만이 알 수 있습니다.

 

공개키를 구성하는 알고리즘은 비대칭 암호라고 부르기도 합니다.

 

사전에 비밀키를 나눠가지지 않아도 사용자들이 안전하게 통신할 수 있도록 합니다.

 

대표적으로 RSA 방식이 이에 해당합니다.

 

cryptography 설치하기

pip install cryptography

설치는 pip 명령어를 통해 설치가 가능합니다.

python 3.7.3 버전에서는 이미 설치가 되어있으므로 추가적인 설치가 필요없습니다.

 

코드

cryptography를 통해 구현한 코드는 다음과 같습니다.

from cryptography.fernet import Fernet

key = Fernet.generate_key()

cipher_suite = Fernet(key)

cipher_text = cipher_suite.encrypt(b"A really secret message. Not for prying eyes.")

plain_text = cipher_suite.decrypt(cipher_text)

print("encrypt_text : ", cipher_text)
print("decrypt_text : ", plain_text)

한줄씩 살펴보기

from cryptography.fernet import Fernet

먼저 cryptography에서 대칭키 암호화를 할 수 있는 Fernet을 import 합니다.

key = Fernet.generate_key()

Fernet.generate_key()를 통해 키를 하나 생성합니다.

cipher_suite = Fernet(key)

cipher_text = cipher_suite.encrypt(b"A really secret message. Not for prying eyes.")

A really secret message. Not for prying eyes. 라는 바이트를 키로 암호화하고

복호화를 위한 토큰(cipher_text)를 생성합니다.

plain_text = cipher_suite.decrypt(cipher_text)

위에서 만든 토큰과 키를 가지고 있다면 원래의 평문으로 복호화가 가능합니다.

print("encrypt_text : ", cipher_text)
print("decrypt_text : ", plain_text)

제대로 암호화 복호화가 이루어졌는지 출력해보면

encrypt_text :  b'gAAAAABei9G1DxGCcZ2ReRkSQYYstjP81WybNAxK4i-3-Q2nygnryzzTo_JUWfHyaO-4XtVmztGjk0uBN_C57hLZ_DKNzWBGdqbQiNONEWql-yC-t0rKUCVfcfAAIQ4h21t7eZjXdM3-'
decrypt_text :  b'A really secret message. Not for prying eyes.'

다음과 같이 잘 수행된 것을 볼 수 있습니다.

 

참고 링크

 

Python cryptographic 라이브러리 알아보기

오늘은 Python으로 문자열을 암호화할 수 있는 cryptographic 패키지에 대하여 알아보려 합니다.

minwook-shin.github.io

Comments