2010-12-03 94 views
0

我的團隊的一些成員今天正在討論密碼存儲和一般安全問題。無論如何,討論簡要介紹了GPU加速的暴力攻擊與傳統的僅限於CPU的實現的比較。排列生成

這讓我感興趣,所以我決定玩一些代碼。由於我以前從未寫過類似的東西,所以我決定編寫一個簡單的(僅限CPU的)蠻力文件。我最初的實施涉及一個固定長度(4位)密碼。出於測試的目的,我實現了它:

for(char a = '0'; a <= '9'; ++a) 
{ 
    for(char b = '0'; b <= '9'; ++b) 
    { 
    for(char c = '0'; c <= '9'; ++c) 
    { 
     for(char d = '0'; d <= '9'; ++d) 
     { 
     candidate[0] = a; candidate[1] = b; 
     candidate[2] = c; candidate[3] = d; 

     // Test 'candidate'... 
     } 
    } 
    } 
} 

這很好,但顯然不靈活。我試圖推廣上述內容來處理任何密碼長度,但沒有這樣做。出於某種原因,我無法理解這些暴力行爲者使用1-n字符可能性給出「字母表」的邏輯。

有沒有一些常見的算法可以讓你做到這一點?歡迎任何例子。

+6

你正在尋找這個概念被稱爲[遞歸](http://en.wikipedia.org/wiki/Recursion):) – 2010-12-03 19:41:13

+0

複製 - http://stackoverflow.com/q/3183469/21727 – mbeckish 2010-12-03 19:43:43

回答

0

這裏是一個迭代版本....下面的工作只爲小寫,但可以很容易地修改....

public static String nextLexographicWord(String txt) 
{ 
    char [] letters = txt.toCharArray(); 
    int l = letters .length - 1; 
    while(l >= 0) 
    { 
     if(letters[l] == 'z') 
      letters[l] = 'a'; 
     else 
     { 
      letters[l]++; 
      break; 
     } 
     l--; 
    } 
    if(l < 0) return 'a' + (new String(letters)); 
    return new String(letters); 
}