0

私は MPI を使用して課題用のパスワード クラッカーを作成していますが、これまで使用したことのない python を使用することにしました。私が行っているのは、パスワードが 5 文字の長さで文字のみであると想定しているだけで複雑ではありません。プログラム内でパスワードをハードコードして比較します。

今、私はそのまま保存してpassword = list("aaamm")いて、クラッカーと呼ばれるメソッドを持っています

cracker(password, alphabet, thispass, position):
    password = original password, alphabet = map(chr, range(97, 123))

そして、このパスは最初は等しい =list("aaaaa")

私はPythonを使用したことがないので、チェックするアルゴリズムを開発するのに苦労しています。thispass[0] == password[0]それらが等しい場合は、次の位置に移動します this pass[1] == password[1]、そうでない場合は、「a」を「b」にインクリメントして比較しますpassword[0].

MPIプロセス用のクラッカー関数にも位置があります。最初のプロセスが「a」から「m」までをチェックしている間、2つのプロセスが位置(= 0、つまりこのパスの「a」)で動作します2 つ目は "n" から "z" までです。

プログラムの反対側で、クラッカー関数を呼び出す場所からアルファベットのサイズを既に分割しています。

私の主な問題は、比較mypass[0]するpassword[0]ことです。理想的にはこれをループ内に配置するのが良いでしょうが、「a」から始まり、アルファベットの範囲が何であれ、ループを作成する方法を決定できません。

これが初めてなので、上のすべてが乱雑である場合はご容赦ください。

4

1 に答える 1

0

==比較について: Python では、演算子 (そしてもちろん!=)を使用して、リスト全体、ネストされたリストなど、さまざまなものを比較できます。

a = [ 'a', 'b', 'c' ]
b = [ 'a', 'b', 'c' ]
c = [ 'x', 'b', 'y' ]
if a == b:  # will be true
  …
if a == c:  # will be false
  …
if a[1] == c[1]:  # will be true
  …

これはリテラルでも機能します。

if ([ [ 'a', 'b' ], [ 'c', 'd', 'e' ], 'f', 'g' ] ==
    [ [ 'a', 'b' ], [ 'c', 'd', 'e' ], 'f', 'g' ]):  # will be true
  …

チェックループに関して、私はこれを提案します:

if len(password) != len(thispass):
  … # ignore attempts with wrong length, e. g. return False or similar
for position in range(len(password)):
  while thispass[position] != password[position]:
    try:
      thispass[position] = alphabet[alphabet.index(thispass[position]) + 1]
    except IndexError:  # no further alphabet element for this position?
      thispass[position] = alphabet[0]  # set to first element of alphabet (wrap)

このようにして、一致するまで各位置をテストして変更することにより、パスワードを見つけます。一致するパスワードにアルファベット以外の要素が含まれている場合、終了しません。

于 2013-09-30T08:56:15.170 に答える