2012-01-16 6 views
2

私は、ファイルからいくつかの行のテキストを読み込み、ユーザーが入力したものと比較するためにmd5ハッシュに変換しようとしています。ファイルから読み込み、 nとスペースを削除します

私はf = open(file, 'r')を使用してファイルを開いて読み込みますが、すべてが正常に動作していますが、その単語に対して適切なハッシュではない単語がハッシュされます。

だから私はスペースを削除する方法を知る必要があります。または、最後に\nがハッシュを間違ってしまう原因となります。

これは意味がある場合。私は本当にそれを言葉にする方法を知りませんでした。

コード:あなたのコードでhttp://pastebin.com/Rdticrbs

+2

"私は本当に言い方を知らなかった。"疑わしいときは、(1)コード、(2)入力、(3)実際の出力、(4)期待出力。 –

+0

http://pastebin.com/Rdticrbs – user1152873

+0

**コードをコード、入力、実際の出力、および予想される出力で**更新**してください。問題を示す**最小の**コードを投稿してください。 –

答えて

3

それが良いではないので、私はちょうど、あなたペーストビンコードを書き換えています。なぜそれを再帰的に書くのですか? (ラインsys.setrecursionlimit(10000000)はおそらくあなたが何か間違ったことをやっているの手掛かりでなければなりません!)

import md5 
hashed = raw_input("Hash:") 
with open(raw_input("Wordlist Path: ")) as f: 
    for line in f: 
     if md5.new(line.strip()).hexdigest() == hashed: 
      print(line.strip()) 
      break 
    else: 
     print("The hash was not found. Please try a new wordlist.") 

    raw_input("Press ENTER to close.") 

それは、ワードリスト内のすべての時間をすべての単語をハッシュので、これは明らかに、遅くなります。単語リストで複数の単語を検索する場合は、ハッシュを単語(逆参照テーブル)にマッピングして使用する必要があります。あなたのワードリストが大きい場合は、large-scale key-value storage libraryが必要な場合があります。

+0

私はfをオープンしています(raw_input( "Wordlist Path:")): SyntaxError:関数呼び出しにエラーとして代入することはできません。 – user1152873

+0

申し訳ありませんが、私が入力したときに考えていませんでした。これまで見たことのないように、 'with'ステートメントを調べるべきです。それは素晴らしいことです! (修正済み) – katrielalex

+0

助けてくれてありがとう。 – user1152873

0

str.strip([chars])

Return a copy of the string with the leading and trailing characters removed.The chars argument is a string specifying the set of characters to be removed. If omitted or None, the chars argument defaults to removing whitespace. The chars argument is not a prefix or suffix; rather, all combinations of its values are stripped:

>>> s = " Hello \n".strip() 
>>> print(s) 
... Hello 

、これを追加します。

words = lines[num].strip() 
+0

私はそれを行う方法を得るが、どのように私はこれに適用するだろうhttp://pastebin.com/Rdticrbs – user1152873

+0

あなたは(ひどい)パスワードクラッカーを書いていますか? – katrielalex

0

あなたは、このようなファイルを開くことができます。

with open('file', 'r') as f: 
    for line in f: 
     do_somthing_with(line.strip()) 

From the official documentationstrip()削除先頭と末尾の文字で文字列のコピーを返します。

編集:私はkatrielalexのコメントのおかげで(私は私が前に掲示するものと信じ、なぜ私は知らない)私のミスを修正。私の謝罪。

+2

いいえ、そうはなりません。 'for line in f.readlines()'は 'for line in f'とまったく同じ結果を持っていますが、ファイル全体を最初にメモリに読み込むだけで無駄です。また、組み込みのクラス 'file'をシャドーしないでください。 – katrielalex

+0

あなたの編集は '.readlines()'を完全に取り除かなければなりません。 – katrielalex

+0

@katrielalex:私の謝罪、あなたは確かに私はそれを信じた理由を知らない。私は通常 '' python-3'で書いていますので、組み込みクラス 'file'の問題はありませんが、' 'python-2'との互換性のために' f'に変更しました。 –

0
def readStripped(path): 
    with open('file') as f: 
     for line in f: 
      yield f.strip() 

dict((line, yourHash(line)) for line in readStripped(path)) 
関連する問題