0

上次我很好奇使用蛮力攻击破解我的密码需要多长时间。我想检查一下。

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

4

2 回答 2

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);
  }

并不是为了效率而编写的,但是如果您有足够的内存和时间,您将获得所有可能的排列。

于 2013-08-04T22:09:40.863 回答
0

您可以下载 php pear 项目数学组合来生成这些密码。

于 2013-08-04T22:22:53.320 回答