2013-09-30 58 views
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]

我也有位置在我的cracker函數是MPI進程,我將有2個進程在位置(= 0,即這個通道的「a」)工作,而第一個進程將檢查從「a」到「 m「,第二個從」n「到」z「。

我已經在程序的另一端從我稱之爲cracker函數的位置拆分了字母大小。

我的主要問題是比較,mypass[0]password[0]理想將是不錯的循環中有這一點,但不能確定如何有一個循環,從「a」到到任何字母的範圍是開始。

這是我第一次如此原諒,如果它的所有凌亂以上。

回答

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) 

這樣您可以通過測試和修改每個位置來找到密碼,直到匹配。如果要匹配的密碼包含字母表外的元素,它將不會終止。

+0

非常感謝,只是想更清楚一點,說thispasspass =「aaa」和password =「baa」,以下是真,執行進入循環(第一輪),而真正的,因爲!= b並且在try塊中,thispass [positiom]現在等於「b」並執行回循環(第二輪)?再次,非常感謝 – Manu

+0

如果'thispass'是'aaa',那麼while循環的第一輪會比較'a'和'b',發現它不同,然後將'a'增加到'b '(接下來是字母表)。下一輪會發現'b'和'b'相等,所以while循環將終止並且'for'循環的下一輪將開始(爲下一個字符重新輸入while循環)。 – Alfe

相關問題