1

我正在制作一个密码暴力破解工具作为学习练习,我希望它可以恢复。

所以,我想要说的是,这是一组可能的字符,如果我计算这个集合的每个可能组合的笛卡尔集合,长度为 n,那么点 x 的集合是什么?

但是,我想在不计算整个集合的情况下做到这一点。我在网上的一个地方看到过类似的逻辑,但我无法将其概括为适合。

任何帮助都会很棒,谢谢!如果有帮助,我精通 C#。

编辑:这是我之前提到的问题:如何从笛卡尔积中选择特定项目而不计算其他所有项目

编辑:这是我的意思的一个例子:

Char set = [abcd]

Length n = 4

Permutations:

[aaaa]
[aaab]
[aaac]
[aaad]
[aaba]
....
[dddd]

因此,如果我要搜索 4 的集合,我会得到 [aaad]。但是,如果我正在搜索元素 7000,则需要很长时间才能到达该点。

4

1 回答 1

1

这实现了您链接的问题的答案:

static string Get(string chars, int n, int i)
{
    string ret = "";
    int sizes = 1;
    for (int j = 0; j < n; j++) {
        ret = chars[(i / sizes) % chars.Length] + ret;
        sizes *= chars.Length;
    }
    return ret;
}

例子:

string chars = "abcd";
int n = 3;

for (int i = 0; i < Math.Pow(chars.Length, n); i++)
    Console.WriteLine(i + "\t" + Get(chars, n, i));
0       aaa
1       aab
2       aac
3       aad
...
61      ddb
62      ddc
63      ddd
于 2014-03-08T13:32:12.073 回答