Шифрование и дешифрование с использованием PyCrypto AES 256

Я пытаюсь создать две функции с использованием PyCrypto, которые принимают два параметра: сообщение и ключ, а затем шифруют / дешифруют сообщение.

Я нашел несколько ссылок в Интернете, чтобы помочь мне, но у каждой из них есть недостатки:

Этот в Codekoala использует os.urandom, который не рекомендуется PyCrypto.

Более того, ключ, который я даю этой функции, не обязательно будет иметь ожидаемую точную длину. Что я могу сделать, чтобы это произошло?

Также есть несколько режимов, какой рекомендуется? Я не знаю, что использовать: /

Наконец, что именно IV? Могу ли я предоставить другой IV для шифрования и дешифрования, или это даст другой результат?

Вот что я сделал до сих пор:

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))

Ответы на вопрос(10)

Ваш ответ на вопрос