C ++:如果没有复制和粘贴,我怎么能这样做?它循环自己

时间:2014-03-16 18:20:58

标签: c++ passwords cracking

我是C ++的新手,我正试图破解一些强力密码。

目前,它从aaaaa循环到zzzzz。

问题:是否可以像从a到zzzzz那样使用它?

我正在为此工作6个小时不停,但仍无法找到解决方案。

等待你的帮助,谢谢!

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string password;
    string generatedPass;
    int x;

    cin >> password;

    char digitArray[]={96,97,97,97,97,97,97,97,97,97};
    int lenght=0;
    int maxLenght=password.length();


    while( password.compare(generatedPass) != 0 ){
        digitArray[0]++;
        for(int x=0;x<password.length();x++){
           if (digitArray[x] == 123)
                {
                    digitArray[x] = 97;
                    digitArray[x + 1]++;
                }
        }

        // creating the string with those digits
        generatedPass=digitArray[password.length()-1]; // i set the first one here

        for(int      i=password.length()-2   ;  i>=0  ;  i-- )
            generatedPass+= digitArray[i]; // now i add other digits to next to first digit

            cout << generatedPass << endl; // i put it to test how it looks
    }

    cout << generatedPass << endl; // gives the result
    return 0;
}

1 个答案:

答案 0 :(得分:2)

看起来这里有一种模式:

    if(digitArray[0]==123){     // i designed it like stopwatch, if like when second is 60, you make it 0 and increment minute by 1
        digitArray[0]=97;       // 97 is the character 'a' in ASCII table, 122 is the 'z'
        digitArray[1]++;
    }

    // HELP HERE, PLEASE!
    //
    // my program loops itself after this, copy paste doesn't look cool. how can i improve this part? that 4 in the digitArray[4] is maximum passwordlenght
    // im working on this like nonstop 6 hours and still couldnt find a solution...

    if(digitArray[1]==123){
        digitArray[1]=97;
        digitArray[2]++;
    }

    if(digitArray[2]==123){
        digitArray[2]=97;
        digitArray[3]++;
    }

模式的一般形式是:

if (digitArray[x] == 123)
{
    digitArray[x] = 97;
    digitArray[x + 1]++;
}

除了最后一个案例。我会让你弄清楚如何投入for循环。

编辑1:创建密码从'a'到'zzzzzz'
这很像计算基数26或基数27(取决于你是否计算空格)。

让我们考虑添加。假设字母'a'到'z'是连续的。

std::fill(&digitArray[0], &digitArray[sizeof(digitArray)], ' '); // Initialize
unsigned int last_digit_index = sizeof(digitArray) - 1U;
if (digitArray[last_digit_index] == ' ')
{
  digitArray[last_digit_index] = 'a';
else
{
  ++digitArray[last_digit_index];
}

此处存在问题,即处理溢出,也称为 carry

对于溢出,数字需要重置为'',并且下一个(或前一个)数字需要递增。

上面的代码负责增加值,因此只需要更改索引。

更改索引和循环(或递归)留作OP的练习。