我在C ++中制作一个小密码强度计算器,它将计算密码的信息熵值以及NIST值。我有程序的熵部分工作,但NIST部分给我一些问题。我很确定我有正确的公式,但每次我输入我的测试密码,我知道应该给我一个值24我得到一个值18.我没有看到我的代码中的问题会导致这个让我相信这是一个公式的问题。是否有人熟悉NIST公式并可以为我提供帮助?任何帮助将不胜感激。我在下面附上了我的代码。
#include <iostream>
#include <cmath>
#include <string>
using namespace std;
int main(){
string eight_password, first_char, next_seven;
int ep_length;
double ent_strength, nist_strength;
const int NIST_FIRST = 4, NIST_SEVEN = 2, NIST_REM = 1;
const double NIST_TWELVE = 1.5;
cout << "Hello! Please enter a password of 8 characters or less (including spaces!):" << endl;
getline(cin, eight_password);
ep_length = eight_password.length();
ent_strength = (ep_length*((log(94))/(log(2))));
first_char = eight_password.substr(0, 1);
next_seven = eight_password.substr(1, 7);
nist_strength = (first_char.length()*NIST_FIRST) + (next_seven.length()*NIST_SEVEN);
cout << nist_strength<<endl;
cout << first_char.length() << endl;
cout << next_seven.length() << endl;
return 0;
}
答案 0 :(得分:2)
这个公式
nist_strength = (first_char.length()*NIST_FIRST) + (next_seven.length()*NIST_SEVEN);
始终生成18,因为它根本没有考虑密码的组成。它只考虑其第一个和后七个字符的长度,即1 * 4 + 7 * 2 = 18。该标准根据密码的组成定义了不同的评估方法,即所有下/上,下+上,下+上+数字等。
我建议您设置两个变量n1和n7,并在检查基于标准的第一个和后7个字符后计算它们的值,然后在公式中使用它们。
希望这有帮助。