C# 从特定索引启动单词生成器
我有一个密码列表生成器,它生成特定长度的特定字符集的所有组合。 当然,这个列表很长,需要相当长的时间才能生成 我想并行化这个过程,但遇到了一个算法/数学问题 例如,我想为4个字符长的密码生成[a-z](26个删除符)的所有组合。 组合的总计数为26^4=456.976 要并行化为两个进程,我需要一个进程来处理前半部分,另一个进程来处理后半部分。228.488个组合 现在来谈谈这个问题。。。 从228.488这个数字到发电机应该从哪个字母组合开始,应该用哪个过程来处理下半部分 我正在寻找一个通用的解决方案,所以如果更改了字母计数或密码长度,它仍然可以工作。 当然,这个问题早就解决了,也许它甚至还有一个名字。我只是不知道这个名字,我无法用谷歌搜索它 我正在用C实现这个#C# 从特定索引启动单词生成器,c#,algorithm,math,combinatorics,C#,Algorithm,Math,Combinatorics,我有一个密码列表生成器,它生成特定长度的特定字符集的所有组合。 当然,这个列表很长,需要相当长的时间才能生成 我想并行化这个过程,但遇到了一个算法/数学问题 例如,我想为4个字符长的密码生成[a-z](26个删除符)的所有组合。 组合的总计数为26^4=456.976 要并行化为两个进程,我需要一个进程来处理前半部分,另一个进程来处理后半部分。228.488个组合 现在来谈谈这个问题。。。 从228.488这个数字到发电机应该从哪个字母组合开始,应该用哪个过程来处理下半部分 我正在寻找一个通用的
谢谢。您正在探索整个
[a-z]^4
空间。该空间中有不同的元素
只考虑一个元素<代码> [AZ] ^ 4 /代码>,作为基<代码> 26 < /代码>中的4位数字。给定一个整数
i
,你可以在26进制中找到它的表达式,得到你要找的单词
word[0] = i % 26
word[1] = (i / 26) % 26
word[2] = (i / 26 / 26) % 26
word[3] = (i / 26 / 26 / 26) % 26
如果您有M
台机器,索引j
处的机器可以从索引j*(26^4/M)
处启动
因此,如果您的机器从索引:228488开始,它将以单词开头:
word[0] = 228488 % 26 = 0 => 'a'
word[1] = (228488 / 26) % 26 = 0 => 'a'
word[2] = (228488 / 26 / 26) % 26 = 0 => 'a'
word[3] = (228488 / 26 / 26 / 26) = 13 => 'm'
为什么每次不随机收集字符(4个或n个),这将不可避免地导致重复。此外,该列表应该是详尽的,因为它将用于安全渗透测试。希望用户名是唯一的,并且用户名和密码的组合将用于身份验证过程,因此在这种情况下,重复的可能不是问题。而且,即使你通过并行处理填充了一个列表
中的'4.503.599.627.370.496',也不会好。我可能会提出一个非常愚蠢的建议,但为什么不从中间的字母(13)开始呢?我认为它是26^4,而不是4^26。太棒了!另外还要感谢您添加有关M机器的详细信息。