【问题标题】:python 3 'function' object is not iterablepython 3'function'对象不可迭代
【发布时间】:2019-09-17 14:16:24
【问题描述】:

我是 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 上运行它有错误。有人可以解释原因并帮我解决这个问题吗?

更新:

  • 我正在使用pycryptodome 而不是Pycrypto,因为我无法在我的电脑上安装 Pycrypto。
  • 我做了一些研究如何解决这个问题。有一个链接说错误是由 lib 中的 python-crypto 和 local/lib 之间的冲突引起的……但我不认为是这样。这是链接https://github.com/nccgroup/Winpayloads/issues/21

【问题讨论】:

  • 当您在 Google 上搜索该错误消息时,您发现了什么?
  • 请在问题正文中包含错误的完整回溯。
  • 抱歉信息不足。我已经更新了我能找到的所有内容

标签: python python-3.x aes pycrypto


【解决方案1】:

the documentation:

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

counter 在此上下文中是 anonymous function (a lambda),但不是 Crypto.Util.Counter 的实例。给定key_128 = os.urandom(16) - key_128 是一个字符串。

【讨论】:

  • 谢谢你,我现在明白了一点。但是为什么在python 2中这段代码仍然可以运行?如果这段代码不正确,它应该无法运行
  • @sonduong 它也不应该能够在 Python 2 中运行,除非 AES 库具有完全不同的 Python 2 构建和内部 API。
猜你喜欢
  • 1970-01-01
  • 2018-06-21
  • 2016-07-31
  • 2014-05-03
  • 1970-01-01
  • 2018-04-30
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
相关资源
最近更新 更多