|
|
from Crypto.Cipher import AES |
|
|
from Crypto.Util.Padding import pad, unpad |
|
|
import base64 |
|
|
|
|
|
|
|
|
def encrypt(message: str, key: str) -> str: |
|
|
"""Encrypt error message using AES-128""" |
|
|
|
|
|
key_bytes = key.encode('utf-8')[:16].ljust(16, b'\0') |
|
|
|
|
|
|
|
|
cipher = AES.new(key_bytes, AES.MODE_CBC) |
|
|
|
|
|
|
|
|
ct_bytes = cipher.encrypt(pad(message.encode('utf-8'), AES.block_size)) |
|
|
|
|
|
|
|
|
encrypted = base64.b16encode(cipher.iv + ct_bytes).decode('utf-8') |
|
|
return encrypted |
|
|
|
|
|
def decrypt(encrypted: str, key: str) -> str: |
|
|
"""Decrypt AES-128 encrypted message""" |
|
|
|
|
|
key_bytes = key.encode('utf-8')[:16].ljust(16, b'\0') |
|
|
|
|
|
|
|
|
enc_bytes = base64.b16decode(encrypted) |
|
|
|
|
|
|
|
|
iv = enc_bytes[:16] |
|
|
ct_bytes = enc_bytes[16:] |
|
|
|
|
|
|
|
|
cipher = AES.new(key_bytes, AES.MODE_CBC, iv) |
|
|
|
|
|
|
|
|
pt_bytes = unpad(cipher.decrypt(ct_bytes), AES.block_size) |
|
|
|
|
|
|
|
|
return pt_bytes.decode('utf-8') |
|
|
|
|
|
if __name__ == "__main__": |
|
|
decrypted = decrypt("8HF8LyqjywlLR6DglBkvMxG2qdcAGiC2WHga8P982exv6fp/EXmrcwp6vYiZ1lVS/6nv+xJ72Nd6xV9cya6w3yjBr70U0ziiOtsyKFWAzLNa/swvZn9Ses2ZIbq/nZfkRv+Va19GqwPxV6mDpbuZp0Tl4VQtxJth+RzVX74i71G4mpp5luW8GTZSlnU+KPI8m6BbNKWXYou6ttS41IJubA==", "1923a821") |
|
|
print(decrypted) |
|
|
|