2

これは一般的な知識の質問で、すぐにプロジェクトに変わります。既知のソルトを使用して sha1 をブルート フォースしようとするスクリプトがあります。いずれにせよ、この出願では塩が知られている。とにかく、スクリプトは正常に動作します。これは python スクリプトです。実行すると、利用可能な 16 個のコアの 1 つを超えます。私も総当たり攻撃に全16コアを活用したい!スクリプトを少しいじって、ここで例を使用して複数のコアを利用することができましたが、それらは完全には使用されていません。

http://forum.openopt.org/viewtopic.php?id=51

この並列化は私にとってかなり新しいものであり、Pythonでアプローチする方法がわかりません(スクリプト言語は言うまでもありません)。

TL;DR、MD5などのハッシュでブルートフォースに使用できるすべてのコアをPythonで利用する最良の方法は何ですか?

本質的に私が今持っているのはこれです...(言い換えられたコードに注意してください)

from multiprocessing imports Pools

def prog()
    generate hash_attempt
    compare it to target
jobs = []
po = Pool()
for stuff in things:
    po.apply_sync(prog())

これは機能しますが、私が言ったと思うように、すべてのコアを完全に利用するわけではなく、ランダムに強制終了することがあります. 実行を停止するだけで、スクリプトを呼び出した端末がプロンプトに戻り、その上に「Kill​​ed」と表示されます。奇妙なもの。

ありがとうございます!

4

1 に答える 1

8

Global Interpreter Lock のため、CPU バウンドの作業に Python スレッドを有効に使用することはできません。この場合、 を使用する必要がありますmultiprocessingmultiprocessing子プロセスは、通信のオーバーヘッドが原因で、特定の CPU コアの 100% で動作しない場合があります。通信のオーバーヘッドを最小限に抑えるには、小さなチャンクではなく大きなチャンクで子プロセスに作業を割り当てます。

于 2012-12-19T15:00:17.893 に答える