如何将python字符串更改为无符号字符数组?

Posted

技术标签:

【中文标题】如何将python字符串更改为无符号字符数组?【英文标题】:How to change python string to unsigned char array? 【发布时间】:2012-10-04 07:27:50 【问题描述】:

我正在用 python 编写一个简单的字典攻击类。我们提供了一个影子文件,其中包含用户名和散列密码以及一个字典文件。我们需要添加一个 1-255 的盐,添加到每个字典单词的前面,然后获取每个单词的 MD5 哈希值以与影子文件进行比较。我非常接近,但我的问题是我相信的编码。我的导师说 salt+password 在散列之前存储为 C 中的无符号字符数组。如何在 python 中转换为这个?我尝试了几种编码,包括 ISO-8859-1,但似乎没有任何效果。如有必要,我可以提供我的代码。

这是我的代码:

import hashlib

print("Generating Hashes...")
hash_table = 

def crack(Hash=None):
    if Hash in hash_table:
        print "MATCH\n",hash_table[Hash]
    else:
        print  "NO MATCH"


with open('dictionary','r') as inp_file:
    for word in inp_file.readlines():
        word = word.strip()
        for salt in range(0,256):
            salt = str(salt)
            final = salt+word
            #print final
            final = final.encode('iso-8859-1')
            hash_table[hashlib.md5(final).hexdigest()] = salt+word
#print hash_table

with open('shadow3','r') as inp_file2:
    for line in inp_file2.readlines():
        line = line.strip()
        line1 = line.split(":")[1:]
        print line1[0]
        crack(line1[0])

这里是提供的影子文件

tleela:72fd3dbc120ea01dd9e7c68d6f257181
hfarnsworth:204b319de6f41bbfdbcb28da724dda23
jzoidberg:a08a9e38a28e64583700b20a8251c2ba
brodrgue:eac6bf62c93cbe3f9f934b5143d945e4
pfry:e262e88b10ea1bcdbb385e74216d3a7a
awong:fe58b4b4cecd58d47b08b1916fae00ac
hconrad:4cdbade3215a250eb5607a1127b8f755

这是我目前得到的结果。只找到一个密码:

Desktop/pyhton1# python hash1.py 
Generating Hashes...
72fd3dbc120ea01dd9e7c68d6f257181
NO MATCH
204b319de6f41bbfdbcb28da724dda23
NO MATCH
a08a9e38a28e64583700b20a8251c2ba
NO MATCH
eac6bf62c93cbe3f9f934b5143d945e4
NO MATCH
e262e88b10ea1bcdbb385e74216d3a7a
MATCH
6expression
fe58b4b4cecd58d47b08b1916fae00ac
NO MATCH
4cdbade3215a250eb5607a1127b8f755
NO MATCH

【问题讨论】:

是否有可能只有一个密码可以通过这种方式进行暴力破解? 【参考方案1】:
>>> bytearray("foobar")
bytearray(b'foobar')

>>> for c in bytearray("foobar"):
...     print c
... 
102
111
111
98
97
114

我不确定这是否真的解决了您的哈希问题,因为 md5 库可以很好地处理字符串。也许您可以展示您的代码以及您认为它错误的原因。

【讨论】:

如果没有 encoding 参数,这里将不起作用。根据 2.7 和 3.3 的docu:如果是字符串,还必须给出编码(以及可选的错误)参数; 为什么不只是map(ord,"foobar") @halex,文档令人困惑。他们正在使用“字符串”来表示 unicode 对象。在 2.x 中传递 str 与在 3.x 中传递 bytes 相同,因此不需要编码。【参考方案2】:

根据您的描述,我猜您的主要问题是如何将盐值添加到字典字符串中。假设你使用python2,可以这样做:char(salt_byte) + dictionary_string.

【讨论】:

【参考方案3】:

在 python 3.6 下工作

a = "foofsfds"
listresp = list(map(list, a))
print (listresp)
for charersp in listresp:
    for charfinnal in charersp:
       print(charfinnal)


[['f'], ['o'], ['o'], ['f'], ['s'], ['f'], ['d'], ['s']]
f
o
o
f
s
f
d
s

【讨论】:

这如何解决 OP 的问题?

以上是关于如何将python字符串更改为无符号字符数组?的主要内容,如果未能解决你的问题,请参考以下文章

字符到无符号字符

如何将字符串转换为无符号字符数组 [关闭]

如何计算无符号字符数组中元素的平均值?

如何将十六进制字符串转换为无符号字符数组?

如何将无符号字符数组解析为数值数据

如何将无符号字符数组存储为浮点值?