일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 우분투
- 금융문자분석경진대회
- 더현대서울 맛집
- Baekjoon
- 코로나19
- 캐치카페
- Git
- Docker
- 파이썬
- programmers
- 편스토랑
- hackerrank
- PYTHON
- 백준
- dacon
- 프로그래머스 파이썬
- 맥북
- github
- AI 경진대회
- 데이콘
- Kaggle
- 자연어처리
- 프로그래머스
- ubuntu
- SW Expert Academy
- 편스토랑 우승상품
- ChatGPT
- leetcode
- Real or Not? NLP with Disaster Tweets
- gs25
- Today
- Total
솜씨좋은장씨
[Python] Python과 cryptography를 통해 대칭키 암호화 하기! 본문
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.'
다음과 같이 잘 수행된 것을 볼 수 있습니다.
참고 링크
'Programming > Python' 카테고리의 다른 글
[Python] Slack WebHooks 을 통해 작업 진행상황 알림 받아보기! (feat. Incoming WebHooks) (0) | 2020.04.24 |
---|---|
[Python] Pycharm에 원격 인터프리터 추가하고 적용하기! (11) | 2020.04.08 |
[Python] ValueError: Input strings must be a multiple of 16 in length 원인과 해결방안 (0) | 2020.04.07 |
[Python] Python에서 Sqlite3 사용하기 (feat. Pandas) (6) | 2020.04.06 |
[Python] Python3에서 venv로 가상환경 만들고 사용하기! (0) | 2020.04.06 |