Spaces:
Build error
Build error
| from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes | |
| from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC | |
| from cryptography.hazmat.primitives import hashes | |
| from cryptography.hazmat.backends import default_backend | |
| from cryptography.hazmat.primitives import padding | |
| from base64 import b64encode, b64decode | |
| import os | |
| class AESCipher: | |
| def __init__(self, key: str): | |
| self.backend = default_backend() | |
| salt = os.urandom(16) | |
| kdf = PBKDF2HMAC( | |
| algorithm=hashes.SHA256(), | |
| length=32, | |
| salt=salt, | |
| iterations=100000, | |
| backend=self.backend | |
| ) | |
| self.key = kdf.derive(key.encode()) | |
| self.iv = os.urandom(16) | |
| def encrypt(self, plaintext: str) -> str: | |
| padder = padding.PKCS7(algorithms.AES.block_size).padder() | |
| padded_data = padder.update(plaintext.encode()) + padder.finalize() | |
| cipher = Cipher(algorithms.AES(self.key), modes.CBC(self.iv), backend=self.backend) | |
| encryptor = cipher.encryptor() | |
| encrypted_data = encryptor.update(padded_data) + encryptor.finalize() | |
| return b64encode(self.iv + encrypted_data).decode('utf-8') | |
| def decrypt(self, ciphertext: str) -> str: | |
| encrypted_data = b64decode(ciphertext) | |
| iv = encrypted_data[:16] | |
| encrypted_data = encrypted_data[16:] | |
| cipher = Cipher(algorithms.AES(self.key), modes.CBC(iv), backend=self.backend) | |
| decryptor = cipher.decryptor() | |
| padded_plaintext = decryptor.update(encrypted_data) + decryptor.finalize() | |
| unpadder = padding.PKCS7(algorithms.AES.block_size).unpadder() | |
| plaintext = unpadder.update(padded_plaintext) + unpadder.finalize() | |
| return plaintext.decode('utf-8') | |