如何在 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 中对字符串进行二进制编码?的主要内容,如果未能解决你的问题,请参考以下文章