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],如果它们相等,我将移动到下一个位置pass[1] == password[1],但如果不是,则将“a”增加到“b”并将其与password[0].

我在我的破解函数中也有位置,用于 MPI 进程,我将有 2 个进程在位置上工作(= 0 即此通道的“a”),而第一个进程将检查从“a”到“m”第二个从“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 回答