如何在Python中获取字符串的二进制编码?

问题描述 投票:0回答:2

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

有人可以帮我解决这个问题吗?它让我变得更好。

binary python-3.x ascii md5
2个回答
14
投票

您需要传入一个

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

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

6
投票

只需调用

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

它允许您跳过从磁盘读取的字节的不必要(隐式)解码,然后使用

.encode()
将它们立即编码回字节,然后再将它们传递给
md5()

© www.soinside.com 2019 - 2024. All rights reserved.