【发布时间】:2016-06-12 12:37:30
【问题描述】:
对于一个课堂项目,我决定使用 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;
}
【问题讨论】:
-
您了解微积分、Big-Oh 表示法、基准测试或任何其他类型的优化吗?此外,如果您随机化密码,是否会花费更少的时间,然后有条不紊地破解它(即随机猜测意味着您可能会重复随机次数的猜测随机次数)?我的意思是......当你随机猜测时,熵(如果你知道那是什么)太大了。
标签: c++ arrays optimization passwords