Шифрование и дешифрование с использованием 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))