python - 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 上运行它有错误。有人可以解释为什么并帮我解决这个问题吗?
更新 :
- 我使用
pycryptodome
而不是Pycrypto
因为我无法在我的电脑上安装 Pycrypto。 - 我做了一些研究如何解决这个问题。有一个链接说错误是由 lib 中的 python-crypto 和 local/lib 之间的冲突引起的……但我不认为是这样。这是链接https://github.com/nccgroup/Winpayloads/issues/21
解决方案
根据文档:
counter : (object) – Crypto.Util.Counter 的实例,它允许完全自定义计数器块。此参数与 nonce 和 initial_value 都不兼容。
counter
在这种情况下是一个匿名函数(一个 lambda),但不是Crypto.Util.Counter
. 给定key_128 = os.urandom(16)
-key_128
是一个字符串。
推荐阅读
- python - 替换 Numpy 字符串列表中的单个字符
- css - 修复了允许 React 水平和垂直滚动的标题
- r - R(RGui)如何解析多行字符串?
- c++ - 使用 `glm::perspective` 时 Z 值始终为 1 或 -1
- xaml - UWP XAML 在 ContentDialog 后面隐藏阴影
- azure-devops - Azure DevOps REST API 招摇网址
- python - 如何从 tkinter 窗口中获取变量?
- sql - 库存随机订单 SQL Woocommerce
- firebase - 子集合的 Firebase 安全规则
- java - 使用 OKHttp 访问 Graph Microsoft 上的用户配置文件返回特殊字符