Исходный код EJIO.utils.system.crypto

## /utils/system/crypto.py

from cryptography.fernet import Fernet
from loguru import logger
from .err import CryptographyError

__all__ = [
    'generate_secure_key',
    'encrypt_payload',
    'decrypt_payload',
]


[документация] def generate_secure_key() -> str: """ Генерирует криптографически стойкий случайный ключ безопасности (URL-safe Base64). :return: Ключ шифрования. """ return str(Fernet.generate_key().decode('utf-8'))
[документация] def encrypt_payload(data: bytes, key: str) -> bytes: """ Шифрует поток байт с помощью крипто-стандарта AES/HMAC (Fernet). Полностью защищает файл от десериализации и анализа. :param data: Данные для шифрования. :param key: Ключ шифрования. :return: Зашифрованные данные. :raises: CryptographyError если произошла ошибка шифрования. """ if not data: return b"" try: cipher = Fernet(key.encode('utf-8')) return cipher.encrypt(data) except Exception as e: logger.critical(f"Critical data encryption failure: {e}") raise CryptographyError(f"Failed to encrypt data string: {e}") from e
[документация] def decrypt_payload(cipher_data: bytes, key: str) -> bytes: """ Расшифровывает поток байт и проверяет его целостность. :param cipher_data: Зашифрованные данные. :param key: Ключ шифрования. :return: Расшифрованные данные. :raises CryptographyError: Если ключ не подходит или файл был поврежден/модифицирован. """ try: cipher = Fernet(key.encode('utf-8')) return cipher.decrypt(cipher_data) except Exception as e: logger.error(f"Decryption error! The key is incorrect or the file structure is corrupted: {e}") raise CryptographyError("Invalid key or corrupted encrypted payload data.") from e