Python 3 - Pycrypto - 只读固定缓冲区

use*_*495 3 python types pycrypto python-3.x

所以,我正在使用Pycrypto进行AES加密,现在我将Python 2.7代码移植到Python 3.4.我遇到了以下错误,我无法理解:

TypeError : argument must be read-only pinned buffer, not bytearray.
Run Code Online (Sandbox Code Playgroud)

当我试图显然加密变量的内容时会发生这种情况.确切的行是:

token = b"\0" * 16
final_token = cipher.encrypt(token)
Run Code Online (Sandbox Code Playgroud)

(令牌显然不是000 ......但我正在简化)

我已经在互联网上搜索了一个解决方案,发现这个错误在python 2.6中的websocket lib中发生了很多,但解决方案(使用memoryview(令牌)而不是令牌)没有帮助.有人能解释那里发生了什么吗?我很失落......

use*_*495 5

由于Pycrypto使用encode方法,因此需要s#只读缓冲区.缓冲区不应该可以调整大小,但事实并非如此bytearray.可以使用该bytes函数构建这样的缓冲区.Python 2 str已经是不可变的,因此它是可以接受的.新行应该是:

final_token = cipher.encrypt(bytes(token))
Run Code Online (Sandbox Code Playgroud)

(这个答案的所有学分归于@eryksun,见评论)