在密码破解练习中,使用指定字符集生成所有可能的 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中文网其他相关文章!