前回、ブルート フォース攻撃を使用してパスワードを破るのにどれくらいの時間がかかるか気になりました。確認したいです。
では、特定の範囲(たとえば 15 文字)で可能なすべてのキーの組み合わせを見つけるアルゴリズムをどのように実装すればよいでしょうか? 順列のアルゴリズムを見つけましたが、それらはすべて特定の単語の文字を交換します。それは私が探しているものではありません。
前回、ブルート フォース攻撃を使用してパスワードを破るのにどれくらいの時間がかかるか気になりました。確認したいです。
では、特定の範囲(たとえば 15 文字)で可能なすべてのキーの組み合わせを見つけるアルゴリズムをどのように実装すればよいでしょうか? 順列のアルゴリズムを見つけましたが、それらはすべて特定の単語の文字を交換します。それは私が探しているものではありません。
パスワードが 89 の可能な文字 (az、Az、0-9、スペース、および Windows キーボードのすべての異なる記号キー) の組み合わせで構成されると仮定すると、15 文字の 82 の 15 乗の異なる組み合わせ (82 * 82 * 82 ... )。言い換えれば、たくさん。
文字だけを使用したい場合、大文字と小文字を区別すると、15 文字の組み合わせは 52 ** 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 をダウンロードできます。