1

クラスのPythonで簡単な辞書攻撃を書いています。ユーザー名とハッシュ化されたパスワードを含むシャドウ ファイルと辞書ファイルが提供されます。1 ~ 255 のソルトを各辞書の単語の先頭に追加し、それぞれの MD5 ハッシュを取得してシャドウ ファイルと比較する必要があります。私は非常に近いですが、私の問題は私が信じているエンコーディングです。私のインストラクターは、ハッシュする前に、salt + password が unsigned char 配列として 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

そして、これが私が現在得ている結果です。見つかったパスワードは 1 つだけです。

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
4

3 に答える 3

2
>>> bytearray("foobar")
bytearray(b'foobar')

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

md5ライブラリは文字列で正常に機能するため、これでハッシュの問題が本当に解決するかどうかはわかりません。たぶん、あなたはあなたのコードとあなたがそれが間違っていると思う理由を示すことができます。

于 2012-10-04T07:39:26.320 に答える
0

あなたの説明から、あなたの主な問題は、ソルト値を辞書文字列に追加する方法だと思います。python2 を使用すると仮定すると、これは次のように実行できます。char(salt_byte) + dictionary_string.

于 2012-10-04T07:49:05.470 に答える
0

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
于 2017-05-24T09:01:32.490 に答える