我的代码:
for chars in chain(ALC, product(ALC, repeat=2), product(ALC, repeat=3)):
a = hashlib.md5()
a.update(chars.encode('utf-8'))
print(''.join(chars))
print(a.hexdigest())
它抛出:
Traceback (most recent call last):
File "pyCrack.py", line 18, in <module>
a.update(chars.encode('utf-8'))
AttributeError: 'tuple' object has no attribute 'encode'
完整输出:http://pastebin.com/p1rEcn9H 它似乎在转移到“aa”之后抛出错误。 我该如何解决这个问题?
答案 0 :(得分:4)
你将异构类型chain
放在一起,这是令人头疼的一个原因。
大概ALC
是一个字符串,所以chain
首先产生字符串中的所有字符。当它移至product(ALC, repeat=2)
时,它会开始产生tuple
s,因为这就是product
的工作原理。
只需从chain
调用中生成同类型(即,在需要字符串时始终生成元组,join
并且头痛消失。
for chars in chain(*[product(ALC, repeat=n) for n in range(1,4)]):
...
a.update(''.join(chars).encode('utf-8'))
答案 1 :(得分:-1)
您的错误是尝试将此元组转换为utf-8。请尝试删除此行&#34; a.update(chars.encode(&#39; utf-8&#39;)&#34;
当口译员显示&#34;&#39; tuple&#39;对象没有属性&#39;编码&#39;意味着对象元组不支持以这种方式转换。
但是,如果您想转换所有这些内容,请在程序的第一行使用#coding:utf-8。