上次我对使用强力攻击破解密码需要多长时间感到好奇。我想检查一下。
那么,我应该如何实现算法来找到给定范围内的所有可能的键组合(例如15个字母)?我找到了围绕排列的算法但它们都交换了给定单词的字母,这不是我想要的。
答案 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来生成这些密码。