# [CRUCIBLE-SEED]
# category: insecure_crypto
# severity: high
# language: python
# expected: DES cipher usage and AES-ECB mode with static key

from Crypto.Cipher import DES, AES
import base64

DES_KEY = b"weakkey!"  # 8 bytes — DES is broken
AES_KEY = b"0123456789abcdef"  # 16 bytes


def des_encrypt(data: str) -> str:
    # DES has only 56-bit effective key length — trivially brute-forced
    padded = data + " " * (8 - len(data) % 8)
    cipher = DES.new(DES_KEY, DES.MODE_ECB)
    return base64.b64encode(cipher.encrypt(padded.encode())).decode()


def aes_ecb_encrypt(data: str) -> str:
    # ECB mode: identical plaintext blocks produce identical ciphertext blocks
    pad_len = 16 - len(data) % 16
    padded = (data + chr(pad_len) * pad_len).encode()
    cipher = AES.new(AES_KEY, AES.MODE_ECB)
    return base64.b64encode(cipher.encrypt(padded)).decode()


def aes_ecb_decrypt(ciphertext: str) -> str:
    cipher = AES.new(AES_KEY, AES.MODE_ECB)
    decrypted = cipher.decrypt(base64.b64decode(ciphertext))
    pad_len = decrypted[-1]
    return decrypted[:-pad_len].decode()
