Szyfrowanie i deszyfrowanie przy użyciu PyCrypto AES 256

Próbuję zbudować dwie funkcje przy użyciu PyCrypto, które akceptują dwa parametry: komunikat i klucz, a następnie zaszyfrować / odszyfrować wiadomość.

Znalazłem kilka linków w sieci, aby mi pomóc, ale każdy z nich ma wady:

Ten w codekoala używa os.urandom, który jest odradzany przez PyCrypto.

Co więcej, klucz, który podaję tej funkcji, nie gwarantuje, że będzie dokładnie oczekiwana długość. Co mogę zrobić, aby tak się stało?

Ponadto istnieje kilka trybów, który jest zalecany? Nie wiem, czego użyć: /

W końcu, czym dokładnie jest IV? Czy mogę zapewnić inny IV do szyfrowania i deszyfrowania, czy też będzie to wynik innego wyniku?

Oto co zrobiłem do tej pory:

from Crypto import Random
from Crypto.Cipher import AES
import base64

BLOCK_SIZE=32

def encrypt(message, passphrase):
    # passphrase MUST be 16, 24 or 32 bytes long, how can I do that ?
    IV = Random.new().read(BLOCK_SIZE)
    aes = AES.new(passphrase, AES.MODE_CFB, IV)
    return base64.b64encode(aes.encrypt(message))

def decrypt(encrypted, passphrase):
    IV = Random.new().read(BLOCK_SIZE)
    aes = AES.new(passphrase, AES.MODE_CFB, IV)
    return aes.decrypt(base64.b64decode(encrypted))

questionAnswers(10)

yourAnswerToTheQuestion