首页 > 解决方案 > python 3'function'对象不可迭代

问题描述

我是 python 新手,我正在尝试使用套接字在 python 中创建一个聊天服务器。在我的服务器中,我想加密和解密从客户端发送到服务器的消息。我正在尝试从服务器创建一个密钥,然后将其发送到客户端,但我收到此错误:“'function' object is not iterable” . 我正在关注本指南:https ://riptutorial.com/python/topic/8710/sockets-and-message-encryption-decryption-between-client-and-server 。以下是产生错误的代码:

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

我尝试在 python 2.7 上运行本指南并且运行正常。但我在 python 3 上运行它有错误。有人可以解释为什么并帮我解决这个问题吗?

更新 :

标签: pythonpython-3.xaespycrypto

解决方案


根据文档

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

counter在这种情况下是一个匿名函数(一个 lambda),但不是Crypto.Util.Counter. 给定key_128 = os.urandom(16)-key_128是一个字符串。


推荐阅读