Home >Backend Development >Golang >How Can I Generate All Possible N-Character Passwords in Go?

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

Susan Sarandon
Susan SarandonOriginal
2024-11-26 02:55:10517browse

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

Generating All Possible N-Character Passwords in Go

In Python, one can employ the itertools.product() function to generate all possible passwords of a fixed length. For example, to create 2-character passwords using characters A-E, one could use:

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

However, in Go, the task of generating passwords can be achieved through a different approach:

The desired operation is essentially an n-ary Cartesian product of a set with itself. For example, to create all 3-character passwords, we need Prod(set,set,set). This can be constructed iteratively.

Initially, we create our n-1 product, then for each product and each element of the original set, we append that element. Let's demonstrate with a 2-characters to 3-characters password generation:

"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, we can implement this as:

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
}

This solution can be further optimized by leveraging lazy evaluation, reducing memory usage. Here's a playground link for reference: http://play.golang.org/p/6LhApeJ1bv

The above is the detailed content of How Can I Generate All Possible N-Character Passwords in Go?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn