Source code for oi_cli2.utils.enc
from hashlib import md5
from base64 import b64decode, b64encode
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad, unpad
[docs]class AESCipher:
def __init__(self, key: str):
self.key = md5(key.encode('utf8')).digest()
[docs] def encrypt(self, data: str) -> str:
iv = get_random_bytes(AES.block_size)
cipher = AES.new(self.key, AES.MODE_CBC, iv)
return b64encode(iv + cipher.encrypt(pad(data.encode('utf-8'), AES.block_size))).decode('utf-8')
[docs] def decrypt(self, data: str) -> str:
raw = b64decode(data)
cipher = AES.new(self.key, AES.MODE_CBC, raw[:AES.block_size])
return unpad(cipher.decrypt(raw[AES.block_size:]), AES.block_size).decode('utf-8')