2010-12-03 73 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); 
}