好的我已经苦苦挣扎了一段时间,尝试使用excel和其他工具来生成每个单个10个字符/数字组合,我决定用代码尝试一下吗?我尝试使用javascript但似乎无法找到任何执行此操作的代码,我不希望任何重复项都希望它以.txt文档结尾。理想情况下,每行1个输出。在此先感谢,我不介意使用其他语言,如PHP,但只需要帮助:/我已经尝试在php中执行它我的代码在我的网站下面。然后在下面这就是代码实际做的事情。再次感谢,史蒂夫。
它不允许我在此处发布我的代码,因此它在http://stephengoodings.com/combination/show.html
上答案 0 :(得分:1)
我无法弄明白你的代码,你说
每10个字符/数字组合可能
然而您的代码会生成三个符号的组合。
无论如何,我认为更简单的方法是考虑对序列中的每个位置使用36个符号 - A到Z,0到9。如果你有一个一个字符序列,这将为你提供36种可能,你可以从0到35编号。
如果你有一个两个字符序列,那么第一个位置就有36种可能性,而第二个位置每个可能有36种可能性,这给36乘以36(从00到00) 0A到0Z,然后是A0,通过ZZ)或36到第二个电源。
因此,如果您有十个位置,那么最终会将36个提升到第十个电源;从0到的每个数字数字(减1)将唯一地标识一个且仅一个组合。您只需在for
周期中枚举它们。
反过来,从数字到组合,你使用模运算:
$symbols = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
for ($i = 0; $i < BIG_NUMBER; $i++) {
$start = $i;
$seq = '';
for ($j = 0; $j < 10; $j++) {
$k = $start % strlen($symbols);
$start /= strlen($symbols);
$sq .= $symbols[$k]; // or $seq = $symbol[$k] . $seq;
}
print "$seq\n";
}
只知道36到第十个电源是3656158440062976.虽然它可以由64位数字保持,但它将花费你很长时间 生成所有组合。
每秒100万次组合,我认为这大约是115年。
此外,十一(十个字符和一个换行符)乘以36到十分之一超过三万太字节。
我认为您可以更好地确定您需要该序列的内容,并以不同方式实施该问题。
例如:如果你需要并行暴力破解密码,比如在100台计算机之间,你可以为每台计算机分配序列的一部分,以便不重复工作,然后分别拥有它们尝试解码并保存正在检查的当前组合,而不是保存过去的组合。由于组合按升序排列,并且您知道每个系统的起点和终点,因此您不会丢失任何信息并节省大量内存和磁盘空间。