当使用pyaes进行AES加密时,明文块必须是16字节错误

2024-04-24 05:51:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用pyaes进行AES加密。在

我下面的代码运行得很好。在

text = 'Hello world !!!!'
encrypter = pyaes.AESModeOfOperationCBC('my_test_key_0001', 'my_test_vec_0001')
encrypted = base64.b64encode(encrypter.encrypt(text))
print(encrypted)

但是,当我将文本值更改为

text = 'rO0ABXVyAAJbQqzzF/gGCFTgAgAAeHAAAAAI3z7LN2KbyKE='

它返回错误。在

^{2}$

我不是AES方面的专家,所以可能缺少基本知识。在

我不能使用pycrypto,因为我正在为红移开发{},根据我的发现,{}在那里不受支持。在


Tags: keytexttesthelloworldmyencryptedaes
1条回答
网友
1楼 · 发布于 2024-04-24 05:51:37

^{}只允许对正好一个块(16字节)长的文本进行加密。对于较长的文本,必须使用BlockFeeder

import pyaes, base64

#Encryption
text = 'rO0ABXVyAAJbQqzzF/gGCFTgAgAAeHAAAAAI3z7LN2KbyKE='
encrypter = pyaes.Encrypter(pyaes.AESModeOfOperationCBC('my_test_key_0001', 'my_test_vec_0001'))
ciphertext = encrypter.feed(text)
ciphertext += encrypter.feed()
ciphertext = base64.b64encode(ciphertext)

#Decryption
decrypter = pyaes.Decrypter(pyaes.AESModeOfOperationCBC('my_test_key_0001', 'my_test_vec_0001'))
decrypted = decrypter.feed(base64.b64decode(ciphertext))
decrypted += decrypter.feed()
print('>' + decrypted + '<\n')

块进料器还自动执行padding。填充是将数据添加到消息末尾,直到长度与块长度的整数倍相对应(通常很重要,但与示例无关,因为已经满足长度条件)。在

编辑:

Encrypter#feed(<plaindata>)缓冲明文,加密除最后一个块(如果最后一个块已完成)或最后两个块(如果最后一个块不完整)之外的数据,并返回加密的数据。最后一个Encrypter#feed()调用发出明文结束的信号,触发剩余部分的填充和加密,并返回加密的数据。这可能是 下面的代码片段说明了这一点:

^{pr2}$

在本例中,最后一个纯文本块是不完整的。如果纯文本的最后一个块已经完成,则填充一个额外的完整块。这里使用的填充是PKCS7。在

相关问题 更多 >