我要创建一个分布式密码破解程序,在其中我将使用蛮力技术,因此我需要字符串的每种组合。

为了分发,Server将为Client提供一系列字符串,例如从"aaaa""bxyz"。我假设字符串长度为四。因此,我需要检查这两个界限之间的每个字符串。

我试图在C中生成这些字符串。我试图为此做逻辑,但是我失败了。我也在Google上搜索,但没有任何好处。任何想法?

编辑

对不起兄弟,我要编辑

我想在范围内组合字符串,让我们假设在aaaaaazz之间是像aaaa aaab aaac aaad ..... aazx aazy aazz这样的字符串。我的字符空间只是上下左右的英文字母,大约是52个字符。我想检查4个字符的每个组合。但是Server将在其客户端之间分配字符串范围。我的问题是,如果一个客户端的范围在aaaaaazz之间,那么我将如何在这些界限之间生成字符串。

最佳答案

如果您的字符串仅包含ASCII表,则上限为256个字符或2 ^ 8个字符。

由于您的字符串长度为4个字符,因此您将具有2^8 * 2^8 * 2^8 * 2^8组合,
2^8^4 = 2^32组合。

只需拆分数字范围,然后在每台机器上启动组合即可。

您可能对此感兴趣:Calculating Nth permutation step?

编辑:

考虑到您的编辑,组合空间将为52^4 = 7.311.616组合。

然后,您只需要为每台计算机划分这些“任务”即可计算,因此7.311.616 / n = r,每台计算机计算的排列量为r-最后一台计算机可以计算r + (7.311.616 % n)组合。

由于您知道要在每台计算机上构建的组合数量,因此必须在每台计算机上执行以下操作:

function check_permutations(begin, end, chars) {

    for (i = begin; i < end; i++) {

        nth_perm = nth_permutation(chars, i);
        check_permutation(nth_perm); // your function of verification

    }

}


函数nth_permutation()并不难得出,我很确定您可以在我发布的链接中得到它。

此后,您只需使用check_permutations之类的功能开始一个过程,给出beginend和字符chars的向量。

关于c - 产生字串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14006879/

10-11 21:15