我试图在python2中实现一个加密/解密函数。
这是加密方案:
但是,我在pycrypto库的AES CTR函数中得到一个'method-wrapper' object is not iterable
错误
这是stacktrace:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-5-1c44f21fcf83> in <module>()
45 l = random.randint(16,48)
46 m = random_bytes(l)
---> 47 assert specialDecryption(k, specialEncryption(k, m)) == m
<ipython-input-5-1c44f21fcf83> in specialEncryption(k, m)
7 # compute PRF
8 r = random_bytes(KEYLENGTH/8)
----> 9 prf = lengthQuadruplingPRF(k, r)
10
11 # xor
<ipython-input-4-59fb6141461b> in lengthQuadruplingPRF(k, r)
34 assert len(k) == KEYLENGTH/8
35 assert len(r) <= KEYLENGTH/8
---> 36 obj = AES.new(k, AES.MODE_CTR, counter=make_counter())
37 output = obj.encrypt(r*4)
38 return output
/usr/local/lib/python2.7/site-packages/Crypto/Cipher/AES.pyc in new(key, mode, *args, **kwargs)
204
205 kwargs["add_aes_modes"] = True
--> 206 return _create_cipher(sys.modules[__name__], key, mode, *args, **kwargs)
207
208
/usr/local/lib/python2.7/site-packages/Crypto/Cipher/__init__.pyc in _create_cipher(factory, key, mode, *args, **kwargs)
77 raise TypeError("IV is not meaningful for the ECB mode")
78
---> 79 return modes[mode](factory, **kwargs)
/usr/local/lib/python2.7/site-packages/Crypto/Cipher/_mode_ctr.pyc in _create_ctr_cipher(factory, **kwargs)
323 # 'counter' used to be a callable object, but now it is
324 # just a dictionary for backward compatibility.
--> 325 _counter = dict(counter)
326 try:
327 counter_len = _counter.pop("counter_len")
TypeError: 'method-wrapper' object is not iterable
代码如下:
^{pr2}$
您的
counter
应该是能够初始化dict
的iterable,而不是绑定方法。在我怀疑您将
make_counter
函数更改为:发件人:
^{pr2}$足够修复它了。在
相关问题 更多 >
编程相关推荐