15

練習用にmd5クラッカーを作成しようとしています。先に進む前に、ここに私のコードがあります:

def offline_wordlist_attack(list_path):
      with fileinput.input(files=(list_path)) as wordlist:
          for word in wordlist:
              md5_hash_object = hashlib.md5() # constructing an md5 hash object
              md5_hash_object.update(binascii.a2b_uu(word))
              word_digest = md5_hash_object.digest() # performing the md5 digestion of the word   
              print(word_digest) # Debug

私の問題はmd5_hash_object.update(binascii.a2b_uu(word))です。hashlib Python 3のドキュメントには、渡される文字列はバイナリ表現update()である必要があると記載されています。ドキュメントは例として使用します。私のコードでは、変数の前に単純にアタッチすることはできません。そこで、 binasciiライブラリを使用しようとしましたが、そのライブラリにも、ドキュメントに次のような注記があります。m.update(b"Nobody inspects")bword

ノート

エンコードおよびデコード関数はUnicode文字列を受け入れません。処理できるのはbytestringオブジェクトとbytearrayオブジェクトのみです。

誰かがこれを手伝ってくれませんか?それは私を良くしている。

4

2 に答える 2

14

bytesではなく、オブジェクトを渡す必要がありますstrstr(Python 3のUnicode文字列)からに移行する一般的な方法は、文字列bytesのメソッドを使用して、使用する.encode()エンコーディングを指定することです。

my_bytes = my_string.encode('utf-8')
于 2012-08-29T10:05:42.220 に答える
6

fileinput.input(...,mode='rb')バイナリモードでファイルを開くには、を呼び出すだけです。このようなファイルは、テキストモードで開かれたファイルのように、Unicode文字列ではなくバイナリ文字列を生成します。

これにより、ディスクから読み取られたバイトの不要な(暗黙の)デコードをスキップし、を使用してバイトにすぐにエンコードしてから、.encode()に渡すことができmd5()ます。

于 2012-08-29T10:07:35.960 に答える