-
반응형
프로그램을 작성하다 보면 민감정보를 암호화 해야 할 경우가 발생합니다.
이럴 경우 사용할 수 있는 암호화 예제 입니다.
암호화 방식은 여러가지가 있습니다.
AES 암호화 방식을 사용하였습니다.
본 예제를 사용하기 위해서는 pycryptodomex 라이브러리를 설치 해야 합니다.
아래 처럼 설치 해 주세요.
C:\py_test>pip install pycryptodomex
Collecting pycryptodomex
Downloading https://files.pythonhosted.org/packages/63/20/ee41b6fd4a2a771509a2ca8f7b50528268eb6b6511298ff7adef74f000b8/pycryptodomex-3.9.8-cp38-cp38-win_amd64.whl (14.1MB)
|████████████████████████████████| 14.1MB 6.4MB/s
Installing collected packages: pycryptodomex
Successfully installed pycryptodomex-3.9.8
먼저 예제 사용 방법입니다.
C:\py_test>python encrypt_create.py
암호화 할 값을 입력하세요
password
2+h5LrxB/B3mQn7eN7m3J+Uptj9xQOFw2JYWQ/Sjt10=
입력된 값: password
암호화 할 값을 입력해 주면 암호화된 값을 보여 줍니다.
다시 암호화된 값을 복호화 해주어 입력된 값을 보여 줍니다.
암/복호화의 주요 함수는 여러 프로그램에서 사용되므로 라이브러리화 하여 클래스로 작성하였습니다.
예제 파일 입니다.
암/복호화를 만드는 프로그램 : encrypt_create.py
암/복호화 함수 : cryption.py
cryption.py
import base64
import hashlib
from Cryptodome import Random
from Cryptodome.Cipher import AES
class MyCipher:
def __init__( self ):
self.BS = 16
self.pad = lambda s: s + ( self.BS- len(s.encode('utf-8')) % self.BS) * chr(self.BS - len(s.encode('utf-8')) % self.BS)
self.unpad = lambda s : s[0:-s[-1]]
self.key = hashlib.sha256().digest()
def encrypt( self, raw ):raw = self.pad(raw)
iv = Random.new().read(AES.block_size)
cipher = AES.new( self.key, AES.MODE_CFB, iv)
return base64.b64encode( iv + cipher.encrypt( raw.encode('utf-8') ))
def decrypt( self, enc ):enc = base64.b64decode(enc)
iv = enc[:16]
cipher = AES.new( self.key, AES.MODE_CFB, iv )
return self.unpad(cipher.decrypt(enc[16:] ))
def encrypt_str( self, raw ):return self.encrypt(raw).decode('utf-8')
def decrypt_str( self, enc ):if type(enc) == str:
enc = str.encode(enc)
return self.decrypt(enc).decode('utf-8')
encrypt_create.py
import cryption
in_str = input(" 암호화 할 값을 입력하세요\n")
if in_str != None:in_enc = cryption.MyCipher().encrypt_str( in_str ) # 암호화
print( in_enc )
print( "입력된 값: ", cryption.MyCipher().decrypt_str(in_enc) ) # 복호화
이상으로 암호화 복호화 예제 입니다.
반응형'IT 이야기 공간 > 프로그램 언어' 카테고리의 다른 글
파이썬(python) 오라클 연동 접속 방법 cx_oracle (0) 2020.08.12 파이썬(python) SSH client를 이용한 네트워크 장비, 리눅스 서버 통신 방법 - paramiko (0) 2020.08.06 파이썬(python) 티베로 DB 접속 방법 - ODBC (0) 2020.08.05 파이썬(python) 일자 계산, 날짜 비교, 요일 구하기 (0) 2020.08.04 파이썬(python) 현재 날짜 시간 형식 포맷 변환 UTC datetime strfprint strprint (0) 2020.08.03