用于在给定范围内查找所有可能的键组合的算法

时间:2013-08-04 22:00:16

标签: brute-force

上次我对使用强力攻击破解密码需要多长时间感到好奇。我想检查一下。

那么,我应该如何实现算法来找到给定范围内的所有可能的键组合(例如15个字母)?我找到了围绕排列的算法但它们都交换了给定单词的字母,这不是我想要的。

2 个答案:

答案 0 :(得分:1)

假设密码可以包含89种可能的字符(az,Az,0-9,空格和Windows键盘上所有不同的符号键)的组合,那么就有82种15种不同的15种不同的组合人物(82 * 82 * 82 ......)。换句话说,很多。

如果您只想使用字母,并区分大写和小写,则可能有52 ** 15个15个字母的组合。如果你想接受更短字符串的可能性,你可以写一些像(伪代码):

  long combos = 0

  for i = 6 TO 20           -- legal password lengths
     combos = combos + POW(52, i)

  print "there are " + combos.ToString() 
        + " possible passwords between 6 and 20 characters"

要实际枚举并打印C#中的排列,您可以这样做:

  void AddNextCharAndPrintIfDone(string pwd, int maxLen)
  {
     for (char c = 'a';  c < 'Z';  c++)
     {
        pwd = pwd + c;
        if (pwd.Length >= maxLen)
            System.Console.WriteLine(pwd);
        else AddNextCharAndPrintIfDone(pwd, maxLen)
     }
  }

  Main()
  {
     for (int i=6;  i < 20;  i++)
           AddNextCharAndPrintIfDone("", i);
  }

并不是为了提高效率而写的,但如果你有足够的记忆和时间,你就会得到所有可能的排列。

答案 1 :(得分:0)

您可以下载php pear project math combinatoric来生成这些密码。