指定された長さの考えられるすべてのパスワードを効率的に生成する
パスワードを総当たりクラックしようとする場合、考えられるすべての組み合わせを効率的に生成することが重要です。これを達成するために、すべてのパスワードをメモリに同時に保存することを回避し、可変のパスワード長を許可するアプローチを検討します。
N 項デカルト積
タスクここでは、それ自体とのセットの n 値デカルト積を生成する必要があります。 n = 3 で文字 'a' と 'b' を使用して 3 文字のパスワードをすべて生成する問題を考えてみましょう。
反復構築
目的のパスワードを繰り返し構築できます。最初に n-1 個の積を取得し、次に初期セットの各要素をそれぞれの積に追加することによって積を計算します。 product.
2 文字の例
この概念を説明するために、セット {a, b} からすべての 3 文字のパスワードを生成するプロセスを考えてみましょう。
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 サイトの他の関連記事を参照してください。