PyCrypto заброшен и не работает в Python 3.8, поэтому лучшим кандидатом для этой работы является pyca/cryptography
, но если вам действительно нужно, вы можете начать с чего-то вроде этого:
from io import BytesIO
from Crypto import Random
from Crypto.Cipher import AES
payload = BytesIO(b"SomeData")
# Implement PKCS7 padding.
block_size = 16
length = payload.getbuffer().nbytes
to_pad = block_size - length % block_size
payload.seek(length)
payload.write((chr(to_pad) * to_pad).encode("utf8"))
payload.seek(0)
# Setup the cipher.
iv = Random.new().read(block_size)
cipher = AES.new(
"16-CHAR-LENGTH__", # Some secret.
mode=AES.MODE_CBC,
IV=iv,
)
encrypted = cipher.encrypt(payload.read())