我正在尝试通过Python中的PyCrypto库实现AES加密。
我从用户读取密码和从文件读取盐。 然后,我调用PBKDF2从文本密码生成密钥。
PBKDF2(self.master_password, salt, 32)
我会使用Random.get_random_bytes生成一个IV。
IV = Random.get_random_bytes(len(key))
我接下来使用 Crypto.Util 包创建了一个计数器 Counter。
ctr = Counter.new(32, IV)
然后我创建了一个AES对象
e = AES.new(key, AES.MODE_CTR, counter=ctr)
然而,当我调用e进行加密时
e.encrypt(user_name)
我遇到了以下错误
CTR counter function returned string not of length 16
根据我的理解,这个错误意味着块密码是16字节,这与我在https://www.dlitz.net/software/pycrypto/api/current/Crypto.Cipher.AES-module.html找到的文档相符。我尝试通过以下方式创建AES对象将其更改为32字节块大小。
AES_Encryptor = AES.new(key, AES.MODE_CTR, counter=ctr, block_size=32)
但是我遇到了以下错误。
'block_size' is an invalid keyword argument for this function
如果有人能指引我正确的方向,那就太好了。