在密碼破解練習中,使用指定字元集產生所有可能的 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中文網其他相關文章!