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

Posted

技术标签:

【中文标题】如何在 python 中对字符串进行二进制编码?【英文标题】:How can I do a binary encoding of a string in python? 【发布时间】:2012-08-23 21:57: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对象。

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

【问题讨论】:

注意:fileinput.input() 在您的情况下可能太慢了。您可以使用 md5(word).digest() 而不使用明确的 update() 【参考方案1】:

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

my_bytes = my_string.encode('utf-8')

【讨论】:

【参考方案2】:

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

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

【讨论】:

这将是另一种解决方案。但是,在更一般的情况下,它的缺点是无法确保您正在使用哪种编码(因为它取决于输入文件的编码)。

以上是关于如何在 python 中对字符串进行二进制编码?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Python 中对 PDF 文件进行 base64 编码

如何在python中对西班牙语进行编码和解码

如何在 python 中对频谱中的图像进行编码?

如何在 Python 中对数据框列进行一次热编码?

如何在 C# 中对字符串进行 URL 编码

如何在 WinForms 中对 URL 进行编码?