Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python 3';功能';对象是不可编辑的_Python_Python 3.x_Aes_Pycrypto - Fatal编程技术网

python 3';功能';对象是不可编辑的

python 3';功能';对象是不可编辑的,python,python-3.x,aes,pycrypto,Python,Python 3.x,Aes,Pycrypto,我是python新手,我正在尝试使用socket在python中创建聊天服务器。在我的服务器中,我想对从客户端发送到服务器的消息进行加密和解密。我试图从服务器创建一个密钥,然后将其发送到客户端,但出现以下错误:“'function'对象不适用”。我遵循以下指南:。 以下是生成错误的代码: key_128 = os.urandom(16) #encrypt CTR MODE session key en = AES.new(key_128,AES.MODE_CTR,counter = lambda

我是python新手,我正在尝试使用socket在python中创建聊天服务器。在我的服务器中,我想对从客户端发送到服务器的消息进行加密和解密。我试图从服务器创建一个密钥,然后将其发送到客户端,但出现以下错误:“'function'对象不适用”。我遵循以下指南:。 以下是生成错误的代码:

key_128 = os.urandom(16)
#encrypt CTR MODE session key
en = AES.new(key_128,AES.MODE_CTR,counter = lambda:key_128)
encrypto = en.encrypt(key_128)
这就是错误:

Traceback (most recent call last):
  File "test.py", line 4, in <module>
    en = AES.new(key_128,AES.MODE_CTR,counter = lambda:key_128)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python37\lib\site-packages\Crypto\Cipher\AES.py", line 232, in new
    return _create_cipher(sys.modules[__name__], key, mode, *args, **kwargs)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python37\lib\site-packages\Crypto\Cipher\__init__.py", line 79, in _create_cipher
    return modes[mode](factory, **kwargs)
  File "C:\Users\Admin\AppData\Local\Programs\Python\Python37\lib\site-packages\Crypto\Cipher\_mode_ctr.py", line 366, in _create_ctr_cipher
    _counter = dict(counter)
TypeError: 'function' object is not iterable
回溯(最近一次呼叫最后一次):
文件“test.py”,第4行,在
en=AES.new(图例128,AES.MODE\U CTR,计数器=lambda:图例128)
文件“C:\Users\Admin\AppData\Local\Programs\Python37\lib\site packages\Crypto\Cipher\AES.py”,第232行,新格式
返回\u创建\u密码(sys.modules[\uuuuuuuu name\uuuuuuuuu],key,mode,*args,**kwargs)
文件“C:\Users\Admin\AppData\Local\Programs\Python\Python37\lib\site packages\Crypto\Cipher\\uuuuu init\uuuuuu.py”,第79行,在\u create\u Cipher中
返回模式[模式](工厂,**kwargs)
文件“C:\Users\Admin\AppData\Local\Programs\Python37\lib\site packages\Crypto\Cipher\\u mode\u ctr.py”,第366行,位于\u create\u ctr\u Cipher中
_计数器=dict(计数器)
TypeError:“函数”对象不可编辑
我试着在Python2.7上运行这个指南,它运行正常。但我在Python3上运行,它有错误。有人能解释一下原因并帮我解决这个问题吗

更新:

  • 我正在使用
    pycryptome
    而不是
    Pycrypto
    ,因为我无法在电脑中安装Pycrypto
  • 我做了一些研究如何解决这个问题。有一个链接说这个错误是由库中的python加密和local/lib之间的冲突引起的。。。但我不这么认为。这里是链接
根据:

counter:(object)–Crypto.Util.counter的实例,它允许完全定制计数器块。此参数与nonce和initial_值不兼容


在此上下文中,
counter
是一个,但不是
Crypto.Util.counter
的实例。给定
key\u 128=os.uradom(16)
-
key\u 128
是一个字符串。

当您在谷歌上搜索该错误消息时,您发现了什么?请在问题正文中包含该错误的完整回溯。抱歉,缺少信息。我已经更新了我能找到的所有东西谢谢你,我现在明白多了一点。但是为什么在Python2中这段代码仍然可以运行呢?如果这段代码不正确,它应该不能运行run@sonduong它也不能在Python2中运行,除非AES库具有与Python2完全不同的构建和内部API。