티스토리 뷰
민감한 자료들은 암호화 해야 할 필요가 있다.
물론 원래 데이터로 복구하는 복호화도 해야한다.
AES 를 python3 에서 적용해 보자
[install pycrypto]
경험상 python 버전에 따라 패키지를 다르게 설치해야 한걸로 기억한다.
2.x
pip install pycrypto
3.x
pip install pycryptodome
[AESCipher]
패키지 설치가 다 되었으면 class 하나를 추가해 보자
아래의 코드를 추가하면 바로 적용 가능하다. 단 self.key , 즉 암호화에 적용되는 키는 관리
자만 가지고 있어야 하고 data 를 그대로 암호화 하기 보다는 data + salt 해서 암호화/복호
화 하는건 권장한다. (salt 는 임의의 문자열 예를들어 iamboy 이런걸 넣으면 된다.)
import base64
import hashlib
from Crypto import Random
from Crypto.Cipher import AES
class AESCipher():
def __init__(self, key):
self.bs = 32
self.key = hashlib.sha256(AESCipher.str_to_bytes(key)).digest()
@staticmethod
def str_to_bytes(data):
u_type = type(b''.decode('utf8'))
if isinstance(data, u_type):
return data.encode('utf8')
return data
def _pad(self, s):
return s + (self.bs - len(s) % self.bs) * AESCipher.str_to_bytes(chr(self.bs - len(s) % self.bs))
@staticmethod
def _unpad(s):
return s[:-ord(s[len(s)-1:])]
def encrypt(self, raw):
raw = self._pad(AESCipher.str_to_bytes(raw))
iv = Random.new().read(AES.block_size)
cipher = AES.new(self.key, AES.MODE_CBC, iv)
return base64.b64encode(iv + cipher.encrypt(raw)).decode('utf-8')
def decrypt(self, enc):
enc = base64.b64decode(enc)
iv = enc[:AES.block_size]
cipher = AES.new(self.key, AES.MODE_CBC, iv)
return self._unpad(cipher.decrypt(enc[AES.block_size:])).decode('utf-8')
'development > python' 카테고리의 다른 글
[python] inner 함수, 이너 함수 (1) | 2020.06.30 |
---|---|
[python] 파이썬 공부하기-1 (0) | 2018.04.19 |
[pip] freeze 사용법 (0) | 2018.04.13 |
[Python] 파이썬 가상환경 설치 및 이용방법 (0) | 2018.04.13 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- gitlab
- 모바일 테마 적용
- 문서 비교
- 파이썬 독학
- 파이썬 입문
- GIT
- wsgi
- 플러스친구 자동응답
- PuTTYGen
- Tistory
- admin.py
- 장고
- 이미지 비교
- django
- 문과 코딩
- 장고 카톡 자동응답
- 장고 플러스친구 자동응답
- gitignore
- 엑셀 비교
- 파이썬 프로그래밍
- 파이썬 강좌
- django chatbot
- pycrypto
- virtualenv
- 모바일 스킨 적용
- 면접답변
- Python
- 면접정답
- chatbot
- 파이썬
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함