上次我對使用強力攻擊破解密碼需要多長時間感到好奇。我想檢查一下。在給定範圍內查找所有可能的組合鍵的算法
那麼,我應該如何實現算法,以找到給定範圍內的所有可能的組合鍵(例如15個字母)?我發現了用於排列的算法,但它們都是用給定單詞交換字母,這不是我要找的。
上次我對使用強力攻擊破解密碼需要多長時間感到好奇。我想檢查一下。在給定範圍內查找所有可能的組合鍵的算法
那麼,我應該如何實現算法,以找到給定範圍內的所有可能的組合鍵(例如15個字母)?我發現了用於排列的算法,但它們都是用給定單詞交換字母,這不是我要找的。
假設密碼可以包含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);
}
不真正爲效率寫作,但如果你有足夠的內存和時間,你會得到每一個可能的排列。
您可以下載php pear project math combinatoric來生成這些密碼。
我想要algorihtm返回這些組合,而不是數它們;) –
@MichałTabor您沒有時間或計算機內存來進行計算。我做了一個快速項目來計算排列,並提出:7,664,255,028,754,501,632。如果您每秒計算一百萬個密碼,則需要243,032 *年*來運行所有可能性。只是爲了練習,我會將算法添加到我的答案中。 – Curt