C++ 密码破解码的优化;

C++ 密码破解码的优化;,c++,arrays,optimization,passwords,C++,Arrays,Optimization,Passwords,对于一个类项目,我决定使用asci表中的所有可打印字符(减号除外)创建一个密码生成器,然后程序将尝试破解它。 密码字符存储在一个数组中,破解密码的尝试存储在另一个数组中。尝试只是随机字符,然后与整个密码数组进行比较。如果两个数组中的所有字符都匹配,程序将终止…如果不匹配,循环将继续。我的程序的问题是匹配数组需要很长时间,因为尝试只是随机数。你能帮我制定一个策略性的密码检查方法来优化代码吗?即使是伪代码也有帮助。多谢各位 这个。。。这只是一个加载条 #include<iostream>

对于一个类项目,我决定使用asci表中的所有可打印字符(减号除外)创建一个密码生成器,然后程序将尝试破解它。 密码字符存储在一个数组中,破解密码的尝试存储在另一个数组中。尝试只是随机字符,然后与整个密码数组进行比较。如果两个数组中的所有字符都匹配,程序将终止…如果不匹配,循环将继续。我的程序的问题是匹配数组需要很长时间,因为尝试只是随机数。你能帮我制定一个策略性的密码检查方法来优化代码吗?即使是伪代码也有帮助。多谢各位

这个。。。这只是一个加载条

#include<iostream>
#include<cstring>
#include<ctime>
#include<cstdlib>
using namespace std;

int main()
{
int a[1000], length, random, b[1000], c[1000], tries = 0; 
bool cracked = false;

cout << "Enter a password length: ";
cin >> length;

srand(time(NULL));
for (int i =0; i<length; i++){
    do {
        random = (rand()%94)+33;
    }while(random==45);
    a[i] = random;
    cout << char(a[i]);
}cout << endl;

do{
    for(int i =0; i<length; i++){
        do{
            random = (rand()%94)+33;
        }while(random==45);
        b[i] = random;
    }
    for(int k=0; k<length; k++){
        if(b[k]==a[k])
            c[k]=0;
        else
            c[k]=1;
        cracked=false;
        if(c[length-1]==0)
            cracked = true;
        else if(c[length-1]==1){
            k=0;
            cracked = false;
            tries++;
            cout << "... ";
        }
    }
}while(cracked==false);

for(int i=0; i<length; i++)
    cout << char (b[i]);
cout << "\nNumber of tries: " << tries << endl;

return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
int a[1000],长度,随机,b[1000],c[1000],尝试=0;
布尔=假;
长度;
srand(时间(空));

对于(inti=0;i,您的代码只是进行随机猜测,并且您不会阻止它进行重复猜测

你试过连续暴力吗?5分钟需要半分钟,比你的方法稍微好一点

#include<iostream>
#include<cstring>
#include<ctime>
#include<cstdlib>
using namespace std;

int main()
{
int a[1000];
int length;
int random;
int b[1000] = { 33 };
unsigned long long tries = 0;
bool cracked = false;

cout << "Enter a password length: ";
cin >> length;

srand(time(NULL));
for (int i =0; i<length; i++){
    do {
        random = (rand()%94)+33;
    }while(random==45);
    a[i] = random;
    cout << char(a[i]);
}cout << endl;

do{
    b[0]++;
    for(int i =0; i<length; i++){
        if (b[i] >= 94 + 33){
            b[i] -= 94;
            b[i+1]++;
        }else break;
    }
    cracked=true;
    for(int k=0; k<length; k++)
        if(b[k]!=a[k]){
            cracked=false;
            break;
        }
    if( (tries & 0x7ffffff) == 0 )
        cout << "\r       \r   ";
    else if( (tries & 0x1ffffff) == 0 )
        cout << ".";
    tries++;
}while(cracked==false);

cout << "\r       \n";
for(int i=0; i<length; i++)
    cout << char (b[i]);
cout << "\nNumber of tries: " << tries << endl;

return 0;
}
#包括
#包括
#包括
#包括
使用名称空间std;
int main()
{
INTA[1000];
整数长度;
int随机;
int b[1000]={33};
无符号长尝试次数=0;
布尔=假;
长度;
srand(时间(空));

for(int i=0;i除非您知道密码中有任何模式可用于设计算法(即限制搜索空间)剩下的是蒙特卡罗模拟方法。也就是说,生成所有可能的输出。与您已经在做的工作相比,区别在于您从不重复值,您有一个系统的方法来解决问题,并且您将覆盖所有搜索空间(您的版本在运行一段时间后将出现此问题)另外,您不需要任何额外的内存来存储已经生成的值


由于这是一种蛮力,所以优化任何东西的唯一希望就是并行化代码——让代码在多个线程上运行,利用体系结构的管道等等。

你知道微积分、大Oh符号、基准测试或任何其他类型的优化吗?另外,如果是并行化,会不会花费更少的时间你对密码进行了随机化处理,但随后又有条不紊地破解了密码(即,随机猜测意味着你可能会重复随机次数的猜测)?我的意思是…当你只是随机猜测时,熵(如果你知道那是什么)太大了。