如何在python中对字符串进行二进制编码?

Nli*_*tis 9 binary ascii md5 python-3.x

我正在尝试为练习构建一个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
Run Code Online (Sandbox Code Playgroud)

我的问题是md5_hash_object.update(binascii.a2b_uu(word)).该hashlib的Python 3文档指出传递的字符串update()应该是二进制表示.文档m.update(b"Nobody inspects")用作示例.在我的代码中,我不能简单地附加b在变量前面word.所以我尝试使用binascii库,但该库也在文档中有一条说明:

注意

编码和解码功能不接受Unicode字符串.只能处理bytestring和bytearray对象.

有人可以帮我解决这个问题吗?它变得越来越好.

Amb*_*ber 9

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

my_bytes = my_string.encode('utf-8')
Run Code Online (Sandbox Code Playgroud)


jfs*_*jfs 5

只需调用fileinput.input(...,mode='rb')以二进制模式打开文件.这些文件生成二进制字符串而不是Unicode字符串作为文本模式下打开的文件.

它允许您跳过从磁盘读取的字节的不必要(隐式)解码,然后.encode()在传递给它们之前立即将它们编码回字节md5().