我正在尝试构建一个 md5 破解程序以供练习。在我进一步讨论之前,这是我的代码:
def offline_wordlist_attack(list_path):
with fileinput.input(files=(list_path)) as wordlist:
for word in wordlist:
md5_hash_object = hashlib.md5() # constructing an md5 hash object
md5_hash_object.update(binascii.a2b_uu(word))
word_digest = md5_hash_object.digest() # performing the md5 digestion of the word
print(word_digest) # Debug
我的问题是
md5_hash_object.update(binascii.a2b_uu(word))
。 hashlib Python 3 文档指出传递给 update()
的字符串应该采用 二进制表示。该文档使用 m.update(b"Nobody inspects")
作为示例。在我的代码中,我不能简单地将 b
附加在变量 word
前面。所以我尝试使用 binascii 库,但该库在文档中也有一条注释:
注意
编码和解码函数不接受 Unicode 字符串。仅有的 可以处理 bytestring 和 bytearray 对象。
有人可以帮我解决这个问题吗?它让我变得更好。
您需要传入一个
bytes
对象,而不是 str
。从 str
(Python 3 中的 unicode 字符串)到 bytes
的典型方法是在字符串上使用 .encode()
方法并指定您希望使用的编码。
my_bytes = my_string.encode('utf-8')
只需调用
fileinput.input(...,mode='rb')
即可以二进制模式打开文件。此类文件会生成二进制字符串,而不是像在文本模式下打开的文件那样生成 Unicode 字符串。
它允许您跳过从磁盘读取的字节的不必要(隐式)解码,然后使用
.encode()
将它们立即编码回字节,然后再将它们传递给 md5()
。