用于从笛卡尔集中选择特定集的逻辑

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

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

但是,我想在不计算整个集合的情况下这样做。 我在网上看到过类似的逻辑,但是我无法概括为什么这么合适。

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

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

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

Char set = [abcd] Length n = 4 Permutations: [aaaa] [aaab] [aaac] [aaad] [aaba] .... [dddd] 

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

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

 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