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)
댓글 없음:
댓글 쓰기