Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich in Go alle möglichen N-Zeichen-Passwörter generieren?

Wie kann ich in Go alle möglichen N-Zeichen-Passwörter generieren?

Susan Sarandon
Susan SarandonOriginal
2024-11-26 02:55:10493Durchsuche

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

Generieren aller möglichen N-Zeichen-Passwörter in Go

In Python kann man die Funktion itertools.product() verwenden, um alle möglichen zu generieren Passwörter mit fester Länge. Um beispielsweise zweistellige Passwörter mit den Zeichen A-E zu erstellen, könnte man Folgendes verwenden:

from itertools import product
for permutation in product('ABCDE', repeat=2):
    print(permutation)

In Go kann die Aufgabe des Generierens von Passwörtern jedoch durch einen anderen Ansatz gelöst werden:

Die gewünschte Operation ist im Wesentlichen ein n-äres kartesisches Produkt einer Menge mit sich selbst. Um beispielsweise alle dreistelligen Passwörter zu erstellen, benötigen wir Prod(set,set,set). Dies kann iterativ konstruiert werden.

Zuerst erstellen wir unser n-1-Produkt, dann hängen wir für jedes Produkt und jedes Element des Originalsatzes dieses Element an. Lassen Sie uns die Generierung eines 2- bis 3-stelligen Passworts demonstrieren:

"ab" = {a,b} -> {(a,a),(a,b),(b,a),(b,b)} -> {(a,a,a),(a,a,b),(a,b,a),(a,b,b),(b,a,a),(b,a,b),( b,b,a),(b,b,b)}

In Go können wir dies wie folgt implementieren:

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
}

Diese Lösung kann durch die Nutzung einer verzögerten Auswertung weiter optimiert werden. Reduzierung der Speichernutzung. Hier ist ein Playground-Link als Referenz: http://play.golang.org/p/6LhApeJ1bv

Das obige ist der detaillierte Inhalt vonWie kann ich in Go alle möglichen N-Zeichen-Passwörter generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn