首頁  >  文章  >  後端開發  >  如何在 Go 中高效產生所有可能的 N 字元密碼?

如何在 Go 中高效產生所有可能的 N 字元密碼?

Barbara Streisand
Barbara Streisand原創
2024-11-23 06:57:11326瀏覽

How Can I Efficiently Generate All Possible N-Character Passwords in Go?

Go 中迭代 n 字元密碼產生

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn