[컴] python 에서 cryptography 사용

encrypt / encryption / decrypt / 암호 / 암호화 / 복호화 / 파이썬

python 에서 cryptography 사용

이전에 사용했던 PyCrypto 가 이제 더이상 유지보수 되지 않는다. 그래서 페이지에서 추천한 cryptography 를 사용해봤다.


import os
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.primitives import padding

from urllib.parse import quote
import base64
import json

class Crypto:
    def __init__(self, key, iv) -> None:
        
        self.cipher = Cipher(algorithms.AES(key), modes.CBC(iv))
        self.encryptor = None
        self.decryptor = None

    def encrypt(self, plainText: str):
        # padding
        padder = padding.PKCS7(128).padder()
        padded_data = padder.update(plainText) + padder.finalize()

        if not self.encryptor :
            self.encryptor = self.cipher.encryptor()
        return self.encryptor.update(padded_data) + self.encryptor.finalize()

    def decrypt(self, encryptedText: str):
        if not self.decryptor :
            self.decryptor = self.cipher.decryptor()
        decrypted = self.decryptor.update(encryptedText) + self.decryptor.finalize()
        return self.unpad(decrypted)

    def unpad(self, data):
        # unpadding
        unpadder = padding.PKCS7(128).unpadder()
        unpadded_data = unpadder.update(data) + unpadder.finalize()
        return unpadded_data

key = os.urandom(32)
iv = os.urandom(16)

cryptoNut = Crypto(key, iv)
encrypted = c.encrypt(b'testpw')
encoded_encrypted = base64.b64encode(encrypted)
print(encoded_encrypted)

encrypted2 = base64.b64decode(encoded_encrypted)
descrypted = c.decrypt(encrypted2)
print(descrypted)

Reference

  1. Welcome to pyca/cryptography — Cryptography 42.0.0.dev1 documentation

댓글 없음:

댓글 쓰기