-1

私はブルート フォース テクニックを使用する分散パスワード クラッカーを作成しようとしているので、文字列のすべての組み合わせが必要です。

配布のために、ServerfromからまでClientのような文字列の範囲を指定します。弦の長さは4本だと思います。したがって、これら 2 つの境界の間のすべての文字列をチェックする必要があります。"aaaa""bxyz"

これらの文字列を C で生成しようとしています。このためのロジックを作成しようとしていますが、失敗しています。Google でも検索しましたが、メリットはありませんでした。何か案が?

編集

すみません兄弟、編集したいです

文字列と範囲の組み合わせが必要です。その間aaaaaazzそれが..のような文字列になると仮定しましょうaaaa aaab aaac aaad ..... aazx aazy aazz。私の文字スペースは、52文字のような大文字と小文字の英字です。4文字すべての組み合わせをチェックしたい。ただし、サーバーはクライアント間で一連の文字列を配布します。私の質問は、1 つのクライアントが範囲を取得する場合、これらの境界の間aaaaaazz文字列をどのように生成するかということでした。

4

2 に答える 2

3

文字列が ASCII テーブルのみを理解する場合、上限として 256 文字または 2^8 文字になります。

文字列の長さは 4 文字であるため、2^8 * 2^8 * 2^8 * 2^8組み合わせまたは2^8^4 = 2^32組み合わせがあります。

数字の範囲を分割し、各マシンで組み合わせを開始するだけです。

おそらくこれに興味があるでしょう: Calculating Nth permutation step?

編集

あなたの編集を考慮すると、組み合わせのスペースは組み合わせになります52^4 = 7.311.616

次に、各マシンが計算するこれらの「タスク」を分割する必要があるだけなので、各マシンによって計算された順列の7.311.616 / n = rrとして、最後のマシンがr + (7.311.616 % n)組み合わせを計算する可能性があります。

各マシンで構築する組み合わせの量がわかっているので、各マシンで次を実行する必要があります。

function check_permutations(begin, end, chars) {

    for (i = begin; i < end; i++) {

        nth_perm = nth_permutation(chars, i);
        check_permutation(nth_perm); // your function of verification

    }

}

この関数nth_permutation()を導出するのは難しくありません。私が投稿したリンクから取得できると確信しています。

この後、 、、および文字のベクトル をcheck_permutations与えるなどの関数を使用してプロセスを開始するだけです。beginendchars

于 2012-12-22T22:01:47.150 に答える
0

すべての順列を含むツリーを生成できます。たとえば、次の疑似コードのように:

strings(root,len)
    for(c = 'a' to 'z')
        root->next[c] = c
        strings(&root->next[c], len - 1)

で呼び出しstrings(root, 4)ます。

その後、ツリーを走査してすべての順列を取得できます。

于 2012-12-22T22:05:00.200 に答える