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

时间:2014-05-22 07:58:50

标签: python python-3.x types pycrypto

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

TypeError : argument must be read-only pinned buffer, not bytearray.

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

token = b"\0" * 16
final_token = cipher.encrypt(token)

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

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

1 个答案:

答案 0 :(得分:5)

由于Pycrypto使用编码方法,因此需要s# read-only buffer。缓冲区不应该是可调整大小的,而bytearray不是这种情况。可以使用bytes函数构建这样的缓冲区。 Python 2 str已经是不可变的,所以它是可以接受的。新行应该是:

final_token = cipher.encrypt(bytes(token))

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