C++ 密码破解码的优化;
对于一个类项目,我决定使用asci表中的所有可打印字符(减号除外)创建一个密码生成器,然后程序将尝试破解它。 密码字符存储在一个数组中,破解密码的尝试存储在另一个数组中。尝试只是随机字符,然后与整个密码数组进行比较。如果两个数组中的所有字符都匹配,程序将终止…如果不匹配,循环将继续。我的程序的问题是匹配数组需要很长时间,因为尝试只是随机数。你能帮我制定一个策略性的密码检查方法来优化代码吗?即使是伪代码也有帮助。多谢各位 这个。。。这只是一个加载条C++ 密码破解码的优化;,c++,arrays,optimization,passwords,C++,Arrays,Optimization,Passwords,对于一个类项目,我决定使用asci表中的所有可打印字符(减号除外)创建一个密码生成器,然后程序将尝试破解它。 密码字符存储在一个数组中,破解密码的尝试存储在另一个数组中。尝试只是随机字符,然后与整个密码数组进行比较。如果两个数组中的所有字符都匹配,程序将终止…如果不匹配,循环将继续。我的程序的问题是匹配数组需要很长时间,因为尝试只是随机数。你能帮我制定一个策略性的密码检查方法来优化代码吗?即使是伪代码也有帮助。多谢各位 这个。。。这只是一个加载条 #include<iostream>
#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符号、基准测试或任何其他类型的优化吗?另外,如果是并行化,会不会花费更少的时间你对密码进行了随机化处理,但随后又有条不紊地破解了密码(即,随机猜测意味着你可能会重复随机次数的猜测)?我的意思是…当你只是随机猜测时,熵(如果你知道那是什么)太大了。