パスワード クラッキングの演習では、指定された文字セットを使用して、考えられるすべての n 文字パスワードを生成することが重要です。 Go での効率的な解決策は次のとおりです。
n 進デカルト積を利用して、n 文字のパスワードを反復的に構築できます。たとえば、'ABCDE' から 2 文字のパスワードを作成します:
Prod({A,B,C,D,E},{A,B,C,D,E}) = {(A,A),(A,B),(A,C),(A,D),(A,E),(B,A),(B,B),(B,C),(B,D),(B,E),...}
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 }
このメソッドを再帰的に適用することで、任意の文字セットとパスワード長のパスワードのバリエーションを生成できます。この反復的なアプローチにより、メモリ使用量が低く抑えられ、すべての潜在的なパスワードが効率的に列挙されます。
以上がGo で考えられるすべての N 文字のパスワードを効率的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。