2012-02-27 69 views
0

我試圖建立一個MD5'餅乾'並使用兩個不同的腳本來做到這一點,第一個需要從單詞表中的單詞列表(巨大的單詞list.txt),然後將它們散列並寫入另一個文件(WordsHash.txt)。然後第二個採用用戶定義的單詞,哈希它並將其與WordHash.txt中的哈希值進行比較,但是我爲同一個字符串獲取了不同的哈希值。2個腳本返回2個不同的哈希值我認爲是相同的字符串

第一個腳本:

import hashlib 

hashes = open("WordsHash.txt", 'w') 

m = hashlib.md5() 

with open("huge word list.txt") as words: 
    words = words.readlines() 

    print "processing..." 

    for line in words: 

     line = line.replace("\n", "") 

     m.update(line) 

     word_hash = m.hexdigest() 

     line = "%s %s\n" % (line, word_hash) 

     hashes.write(line) 

print "done." 

hashes.close() 

和第二個腳本:

import hashlib 


f = open('WordsHash.txt') 

p = '\'due' 

password = hashlib.md5() 

password.update(p) 

password = password.hexdigest() 

print "%r %r" %(password, p) 



for line in f: 

    lines = line.split(" ") 

    lines[1] = lines[1].replace("\n", "") 

    word_hash = lines[1] 

    if word_hash == password: 

     print "found it, %s" % line 

     exit(0) 

回答

2

你需要爲你想哈希每一件事情一個新的md5對象。否則,當計算後續散列時,您將包括之前的散列工作。考慮到「蘋果」,「香蕉」,「梨」這個列表,你的處理器給出了「蘋果」,「蘋果蕉」和「蘋果蕉梨」的哈希值。

1

如果您要散列一個新字符串,則忽略這兩個代碼片段相同的事實,否則必須創建一個新的hashlib.md5,否則更新將被添加到現有散列中。

1

在散列它之前剝離這個詞而不是替換。

line = line.strip() 
+0

代碼已經以不同的方式做到了這一點。 – 2012-02-27 22:02:14

+0

strip()不會取代\ n – 01100110 2012-02-27 22:05:00

+0

當然,但是告訴提問者無條件剝離並不一定是正確的。 – 2012-02-27 22:07:21

相關問題