首页  >  文章  >  后端开发  >  如何在 Go 中生成所有可能的 N 字符密码?

如何在 Go 中生成所有可能的 N 字符密码?

Susan Sarandon
Susan Sarandon原创
2024-11-26 02:55:10493浏览

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

在 Go 中生成所有可能的 N 字符密码

在 Python 中,可以使用 itertools.product() 函数生成所有可能的 N 字符密码固定长度的密码。例如,要使用字符 A-E 创建 2 个字符的密码,可以使用:

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

但是,在 Go 中,可以通过另一种方法来完成生成密码的任务:

所需的操作本质上是一个集合与其自身的 n 元笛卡尔积。例如,要创建所有 3 个字符的密码,我们需要 Prod(set,set,set)。这可以迭代地构建。

最初,我们创建 n-1 个产品,然后对于每个产品和原始集合的每个元素,我们附加该元素。让我们演示一下 2 个字符到 3 个字符的密码生成:

"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)}

在 Go 中,我们可以将其实现为:

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
}

这个解决方案可以通过利用惰性求值进一步优化,减少记忆 用法。这是一个可供参考的游乐场链接:http://play.golang.org/p/6LhApeJ1bv

以上是如何在 Go 中生成所有可能的 N 字符密码?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn