2016-08-07 6 views
1

私はPythonの学習を始めましたが、私はViolent Pythonという本から始めました。その中で、最初の章では、* nixベースのパスワードハッシュを解読するスクリプトについて、cryptクラスの助けを借りて説明します。ここでは、コードは次のようになります。等しい文字列がtrueに戻らない

import crypt 
def testPass(cryptPass): 
    salt = cryptPass[0:2] 
    dictFile = open('dictionary.txt','r') 
    for word in dictFile.readlines(): 
     word = word.strip('\n') 
     cryptWord = crypt.crypt(word,salt) 
     print cryptPass+":"cryptWord 
     if(cryptPass == cryptWord): 
      print "[+] Password found : "+word 
      return 

print "[-] Password Not Found.\n" 
return 
def main(): 
    passFile = open('passwords.txt') 
    for line in passFile.readlines(): 
     if ":" in line: 
      user = line.split(':')[0] 
      cryptPass = line.split(':')[1].strip(' ') 
      print "[*] Cracking Password For: "+user 
      testPass(cryptPass) 
if __name__ == "__main__": 
main() 

私は、ユーザー名が含まれているpasswords.txtファイルがあります:パスワード(パスワードハッシュ)文字列を、辞書words.Theseが含まれていdictionary.txtという名前の別のファイルにはパスワードの内容です.txtファイル:

apple:HXJintBqUVCEY 
mango:HXInAjNhZF7YA 
banana:HXKfazJbFHORc 
grapes:HXtZSWbomS0xQ 

とdictionary.txt:

apple 
abcd 
efgh 
ijkl 
mnop 

testpassから計算されたパスワードのハッシュ()メソッドとusernためpasswords.txtからパスワードハッシュ私は両方のものを印刷すると、ame appleは同じです。しかし、ここでの4つのユーザー名の出力は「[ - ] Password not found」です。なぜここで==テストが失敗するのですか?

答えて

1

おそらく、末尾に末尾に\nがあります。変更をお試しください:

 cryptPass = line.split(':')[1].strip(' ') 

へ:

 cryptPass = line.split(':')[1].strip('\n').strip(' ') 

またはさらに簡単な(コメントで提案されているように):

 cryptPass = line.split(':')[1].strip() 
+1

'よりも簡単になります' .strip( '\ n')を使用して2つの 'strip'メソッド呼び出しを連鎖します。 –

+1

'.strip()'は改行と空白の両方に対して行います –

+0

ありがとうございます。それは、Javaのバックグラウンドから来て、最後に後ろに\ nがあると思ったことはありませんでした。 –

関連する問題