Maison > développement back-end > Golang > Comment pouvons-nous générer efficacement tous les mots de passe possibles d'une longueur donnée ?

Comment pouvons-nous générer efficacement tous les mots de passe possibles d'une longueur donnée ?

Mary-Kate Olsen
Libérer: 2024-12-01 13:17:10
original
544 Les gens l'ont consulté

How Can We Efficiently Generate All Possible Passwords of a Given Length?

Générer efficacement tous les mots de passe possibles d'une longueur donnée

Lorsque vous essayez de pirater des mots de passe par force brute, il est essentiel de générer efficacement toutes les combinaisons possibles . Pour y parvenir, nous explorerons une approche qui évite de stocker tous les mots de passe en mémoire simultanément et permet des longueurs de mot de passe variables.

Produit cartésien N-aire

La tâche Il s’agit ici de générer le produit cartésien n-aire d’un ensemble avec lui-même. Considérons le problème de la génération de tous les mots de passe à 3 caractères en utilisant les caractères « a » et « b » avec n = 3.

Construction itérative

Nous pouvons construire de manière itérative le souhaité produit en obtenant d'abord le produit n-1, puis en ajoutant chaque élément de l'ensemble initial à chaque produit.

Exemple avec deux caractères

Pour illustrer ce concept, considérons le processus de génération de tous les mots de passe à 3 caractères à partir de l'ensemble {a, b} :

  • Produit à 2 caractères : {ab}
  • Produit à 3 caractères : {(une,une,une),(une,une,b),(une,b,une),(une,b,b),(b,une,une),(b,une,b),( b,b,a),(b,b,b)}

Implémentation en Go

La fonction Go suivante implémente la construction itérative technique :

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
}
Copier après la connexion

Optimisation des performances

La solution présentée peut être améliorée si la génération de mots de passe de différentes longueurs est requise. Pour éviter un nouveau calcul, vous pouvez modifier le code pour prendre un produit arbitraire (n-m)aire et dériver le produit n-aire de manière récursive.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal