对于我的帮助,我应该创建一个预先计算的哈希值文件,从给定的字典中加入0到255的盐到每个密码。我有哈希,但是当我尝试将它们与给定的影子文件进行比较时,我什么也得不到。这让我相信我可能不正确哈希?我的教授确实说密码哈希是用C完成的。这有什么不同吗?
这是我的代码: 找到哈希
import hashlib
f = open('/root/dictionary/dictionary', 'r')
print f
i=0
def getMD5Hash(textToHash=None):
return hashlib.md5(textToHash).hexdigest()
for line in f:
line = line.rstrip()
#print line
i=0
while i <= 255:
j=str(i)
line1 = j+line
md5=getMD5Hash(line1)
print md5,':',line1
i+=1
裂化
f1 = open('/root/dictionary/shadow3','r')
def crack(Hash=None):
f = open('/root/dictionary/HASHES','r')
for line in f:
line = line.rstrip()
line1 = line.split(" ")[0]
if line == Hash:
print (line,"\n",Hash)
return line
for line in f1:
line = line.rstrip()
line = line.split(":")[1:]
print line[0]
result = crack(line[0])
print result
编辑:带有阴影的Rar文件:http://mediafire.com/?euwjpxr3np36brt
给出的字典文件 - http://mediafire.com/?psspoqo900x0hmq
答案 0 :(得分:1)
编辑:
知道了。看看你的crack()函数。您打开哈希文件然后for line in f
剥离该行,然后将该行拆分为line1
以从哈希文件中获取哈希值。然后,将完整的line
而非line1
与您要破解的哈希值进行比较。当然,整行包含的不仅仅是哈希,因此无法匹配。为清楚起见,您可以将line1
重命名为generated_hash
。然后,您需要if generated_hash == Hash:
其他说明:
通过一些故障排除,我们确定问题中发布的示例哈希值无效。我还确定种子解决方案中使用的方法确实是`hashlib.md5(salt + cleartext).hexdigest()。海报正确地生成了哈希值,但是在尝试将它们与给定的影子文件进行比较时,它们在某些时候失败了。最初,行结尾存在一些问题。
由于我知道海报能够毫无问题地生成哈希,我发布了另一种生成哈希的方法并将它们存储在字典中,因此每次都不必从磁盘读取哈希表。
import hashlib
#Initialize an empty dictionary. We'll add entries to this as we read the
#dictionary file in
hash_table = {}
print('Generating hashes...')
#Using with on the file object means that it will be closed automatically
#when the block is finished
with open('dictionary.txt', 'r') as inp_file:
for word in inp_file.readlines():
#strip off the trailing whitespace ('\n' or '\n\r' depending on the platform)
word = word.strip()
#The requirement is for a salt to be prepended to the cleartext
#dictionary word. For each possible salt value...
for salt in range(0,256):
#convert the salt from an int to a string here so we don't have to
#continually do it below
salt = str(salt)
#Store the hash/cleartext pair in the dictionary. The key of the
#dictionary is the hash and the value is the salted cleartext
hash_table[hashlib.md5(salt+word).hexdigest()] = salt+word
注意我是如何使用with fileobject as some_name:
的,当with块完成时会自动关闭文件。哈希存储在hash_table中,hash_table是键/值字典。我们使用散列作为键,将明文作为值来快速匹配散列。如果您想知道特定散列是否在hash_table中,if 'some_hex_hash' in hash_table: do stuff
是正确的方法。要获得哈希值的明文,它只是hash_table['some_hex_hash']
。有关词典的详细信息,请参阅http://docs.python.org/tutorial/datastructures.html#dictionaries。
当然,这是你已经工作过的部分。现在的诀窍是正确加载阴影哈希,然后检查它们是否在您的文件中(或者如果使用字典则在hash_table中)。
答案 1 :(得分:0)
我的直觉是,它不是实现之间计算哈希的方式,而是正在进行哈希处理的方式。例如,您是否确定通过将整数字符串添加到密码的开头来保存影子文件?您确定密码应为strip()
'd?