所以,我正在使用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(令牌)而不是令牌)没有帮助。有人能解释那里发生了什么吗?我很失落......
答案 0 :(得分:5)
由于Pycrypto使用编码方法,因此需要s# read-only buffer。缓冲区不应该是可调整大小的,而bytearray
不是这种情况。可以使用bytes
函数构建这样的缓冲区。 Python 2 str
已经是不可变的,所以它是可以接受的。新行应该是:
final_token = cipher.encrypt(bytes(token))
(这个答案的所有学分归于@eryksun,见评论)