15

我正在尝试构建一个用于练习的 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 对象。

有人可以帮我解决这个问题吗?它对我越来越好。

4

2 回答 2

14

您需要传入一个bytes对象,而不是一个str. str从(Python 3 中的 unicode 字符串)到的典型方法bytes是使用.encode()字符串上的方法并指定您希望使用的编码。

my_bytes = my_string.encode('utf-8')
于 2012-08-29T10:05:42.220 回答
6

只需调用fileinput.input(...,mode='rb')以二进制模式打开文件。此类文件生成二进制字符串,而不是像以文本模式打开的文件那样生成 Unicode 字符串。

它允许您跳过对从磁盘读取的字节进行不必要的(隐式)解码,然后.encode()在将它们传递给md5().

于 2012-08-29T10:07:35.960 回答