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
Release: 2024-11-26 02:55:10
Original
549 people have browsed it

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)
Copy after login

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
}
Copy after login

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!

source:php.cn
Statement of this Website
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
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template