我正在使用MPI为我的作业构建一个密码破解程序,并选择使用我之前没有使用过的python。这不是一个复杂的我正在做的是假设密码长度为5个字符,只有字符,我将在程序中使用硬编码密码进行比较。
现在我正在保存我的password = list("aaamm")
并且有一个名为cracker的方法
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进程的cracker函数中有位置,我将有2个进程在位置上工作(= 0即此传递的“a”),而第一个进程将从“a”检查到“m”和第二个从“n”到“z”。
我已经在程序的另一端分割了字母大小,我称之为cracker function。
我的主要问题是比较,mypass[0]
到password[0]
理想情况下在循环内有这个很好但是无法确定如何有一个从“a”开始到任何字母范围的循环是
这是我的第一次,如果上面的一切都凌乱,请原谅我。
答案 0 :(得分: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)
通过这种方式,您可以通过测试和修改每个位置来找到密码,直到匹配为止。如果要匹配的密码包含字母表外的元素,它将不会终止。