python method-wrapper_python - 'method-wrapper'对象在AES CTR pycrypto库中不可迭代 - 堆栈内存溢出...

我正在尝试在python2中实现加密/解密功能。 这是加密方案:

但是,我在pycrypto库的AES CTR函数中遇到了'method-wrapper' object is not iterable错误

这是堆栈跟踪:

---------------------------------------------------------------------------

TypeError Traceback (most recent call last)

in ()

45 l = random.randint(16,48)

46 m = random_bytes(l)

---> 47 assert specialDecryption(k, specialEncryption(k, m)) == m

in specialEncryption(k, m)

7 # compute PRF

8 r = random_bytes(KEYLENGTH/8)

----> 9 prf = lengthQuadruplingPRF(k, r)

10

11 # xor

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

这是代码:

if __name__ == '__main__':

k = os.urandom(KEYLENGTH/8) # generate key

l = random.randint(16,48)

m = os.urandom(l)

c = specialEncryption(k, m) ## FIRST IN THE FAILURE STACK

def specialEncryption(k, m):

... other code

# compute PRF

r = os.urandom(KEYLENGTH/8)

prf = lengthQuadruplingPRF(k, r) ## SECOND IN THE FAIL STACK

... other code

def make_counter():

import struct

def gen():

i = 0;

while True:

yield struct.pack('>QQ', 0, i)

i += 1

return gen().next

def lengthQuadruplingPRF(k, r):

# Input: 16 byte key, 16 byte value

# Output: 64 byte pseudorandom bytes

obj = AES.new(k, AES.MODE_CTR, counter=make_counter()) ## FAILS HERE

output = obj.encrypt(r*4)

return output

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值