-3

我正在寻找破解我忘记的密码。我知道密码中可能使用的所有单词,但有些单词可能使用或不使用。示例:HarryMetSally 可能是密码,但我可能会使用“Harry”“Billy”“Sally”和“Met”的单词表来组合破解。

如果我有 16 个单词但可能使用了 14-16 个单词,我将如何在 C++ 或 Python 中编码以将 16 个单词(或 20、25、30 个单词)随机连接在一起并一次使用 1 个或 2-16 个一起使用而不是甚至相同的顺序。

例子:

话:哈利比利莎莉遇见

组合示例:

Harry Billy SallyBilly BillySally HarryMetSally HarrySallyMet

我已经广泛搜索了互联网并尝试了 Excel 论坛。有什么指导吗?

4

1 回答 1

0

你说随机...

#include <iostream>
#include "stdlib.h"
#include "time.h"

#define NUM_WORDS 3
char* words[NUM_WORDS] = {
    "Foo",
    "Bar",
    "Baz"
};
typedef unsigned long long ULL;

ULL fact(ULL n, ULL lowerLimit = 1)
{
    if (n <= lowerLimit) return 1;
    return n * fact(n - 1);
}
int main()
{
    srand(time(NULL));

    // I can try single words all by myself, so start at 2 or more words
    for (int nWords = 2; nWords <= NUM_WORDS; ++nWords)
    {
        // calculate the number of possibilities
        // but since it's random, triple it for good measure
        ULL nIters = fact(NUM_WORDS, NUM_WORDS - nWords) * 3;
        for (ULL iter = 0; iter < nIters; ++iter)
        {
            for (int iterWord = 0; iterWord < nWords; ++iterWord)
            {
                int ix = rand() % NUM_WORDS;
                std::cout << words[ix];
            }
            std::cout << std::endl;
        }
    }
    return 0;
}
于 2014-08-21T03:16:33.300 回答