我正在寫一個Python類的簡單字典攻擊。我們提供了一個包含用戶名和散列密碼以及字典文件的影子文件。我們需要在每個詞典單詞前面添加1-255的鹽,然後獲取每個詞的MD5哈希以與影子文件進行比較。我非常接近,但我的問題是我相信的編碼。我的教師說,在散列之前,salt +密碼在C中存儲爲一個unsigned char數組。我如何在Python中轉換爲這個?我已經嘗試過幾種編碼,包括ISO-8859-1,但似乎沒有任何工作。如有必要,我可以提供我的代碼。如何將python字符串更改爲unsigned char數組?
這裏是我的代碼:
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])
這裏是提供shadow文件
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
難道只有密碼的人可以bruteforced這樣? –