2017-01-19 12 views
1

辞書から単語を読み込んでmd5ハッシュを作成し、それを特定のハッシュと比較する、Pythonプログラムを作成しようとしています。ファイルからの単語のmd5ハッシュが文字列のハッシュと一致しないのはなぜですか?

if hashlib.md5(b"string").hexdigest() == "b45cffe084dd3d20d928bee85e7b0f21": 
    print("Equal!") 

しかし、私は、ファイルから行した単語の行を読んだときのハッシュ、:私はファイルから読み込まれていない言葉の2つのハッシュを比較しようとすると、

すべてが正常に動作します言葉は違う。コードは次のようになります。

f = open('short.txt', 'r') 

stringHash = 'b45cffe084dd3d20d928bee85e7b0f21' 

for line in f: 

    if stringHash == hashlib.md5(line.encode('utf_8')).hexdigest(): 
     print("Found it! Password: %s" % line) 

ありがとうございました。

答えて

4

行単位のファイルイテレータは、行終端記号を含む行全体を返します。

コードには、行の行終端文字が含まれています。

line.encode('utf_8').rstrip()正しい結果が得られます。

rstrip()は、文字列がスペースで(意図的に)終了すると失敗します。ファイルはUnix上テキストモードで開かれている場合(

(キャリッジリターン)(Windowsの問題ではない)のままでした\r可能、

line.encode('utf_8').rstrip('\r\n') 

rstrip処理が行われます。その場合は、単に行います'\ r \ n'文字列は削除しないでください。\rまたはnの行末には、str.splitと表示されません。

+0

これは機能しました。ありがとう! ;) –

+1

あなたは答えを受け入れることができます:http://stackoverflow.com/help/someone-answers –

関連する問題