ホームページ > バックエンド開発 > Golang > 与えられた長さの考えられるすべてのパスワードを効率的に生成するにはどうすればよいでしょうか?

与えられた長さの考えられるすべてのパスワードを効率的に生成するにはどうすればよいでしょうか?

Mary-Kate Olsen
リリース: 2024-12-01 13:17:10
オリジナル
479 人が閲覧しました

How Can We Efficiently Generate All Possible Passwords of a Given Length?

指定された長さの考えられるすべてのパスワードを効率的に生成する

パスワードを総当たりクラックしようとする場合、考えられるすべての組み合わせを効率的に生成することが重要です。これを達成するために、すべてのパスワードをメモリに同時に保存することを回避し、可変のパスワード長を許可するアプローチを検討します。

N 項デカルト積

タスクここでは、それ自体とのセットの n 値デカルト積を生成する必要があります。 n = 3 で文字 'a' と 'b' を使用して 3 文字のパスワードをすべて生成する問題を考えてみましょう。

反復構築

目的のパスワードを繰り返し構築できます。最初に n-1 個の積を取得し、次に初期セットの各要素をそれぞれの積に追加することによって積を計算します。 product.

2 文字の例

この概念を説明するために、セット {a, b} からすべての 3 文字のパスワードを生成するプロセスを考えてみましょう。

  • 2 文字の積: {ab}
  • 3 文字の積: {(a,a,a),(a,a,b),(a,b,a),(a,b,b),(b,a,a),(b,a,b),( b,b,a),(b,b,b)}

Go での実装

以下の Go 関数反復構築手法を実装します。

func NAryProduct(input string, n int) []string {
    if n <= 0 {
        return nil
    }

    prod := make([]string, len(input))
    for i, char := range input {
        prod[i] = string(char)
    }

    for i := 1; i < n; i++ {
        next := make([]string, 0, len(input)*len(prod))
        for _, word := range prod {
            for _, char := range input {
                next = append(next, word + string(char))
            }
        }
        prod = next
    }

    return prod
}
ログイン後にコピー

パフォーマンスの最適化

さまざまな長さのパスワードを生成する必要がある場合、提示されたソリューションには改善の余地があります。再計算を回避するには、任意の (n-m) 積を取得し、再帰的に n 項積を導出するようにコードを変更できます。

以上が与えられた長さの考えられるすべてのパスワードを効率的に生成するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート