我是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;
}
答案 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的练习。