윈썸지니의 별책부록
메인화면
  • 분류 전체보기
    • IT 이야기 공간
      • 프로그램 언어
      • 데이터베이스
      • 운영체제
      • 오픈소스
    • 재테크 공간
      • 돈되는 알짜 정보
      • 편리한 생활정보
메인화면
  • 분류 전체보기
    • IT 이야기 공간
      • 프로그램 언어
      • 데이터베이스
      • 운영체제
      • 오픈소스
    • 재테크 공간
      • 돈되는 알짜 정보
      • 편리한 생활정보
블로그 내 검색

윈썸지니의 별책부록

재테크, 생활정보, 알짜정보, 경제정보, 금융정보등의 생활에 편리한 정보를 전달해드립니다.

  • IT 이야기 공간/프로그램 언어

    파이썬(python) AES 암호화 복호화 예제 - pycryptodomex

    2020. 8. 8.

    by. 윈썸지니

    반응형

    프로그램을 작성하다 보면 민감정보를 암호화 해야 할 경우가 발생합니다.

    이럴 경우 사용할 수 있는 암호화 예제 입니다.

     

    암호화 방식은 여러가지가 있습니다.

    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

    이 글을 본 사람들도 관심있게 본 글

    • 파이썬(python) 오라클 연동 접속 방법 cx_oracle 2020.08.12
    • 파이썬(python) SSH client를 이용한 네트워크 장비, 리눅스 서버 통신 방법 - paramiko 2020.08.06
    • 파이썬(python) 티베로 DB 접속 방법 - ODBC 2020.08.05
    • 파이썬(python) 일자 계산, 날짜 비교, 요일 구하기 2020.08.04
Designed by Organic
블로그 이미지
윈썸지니

티스토리툴바