Я делаю небольшой калькулятор надежности пароля в 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;
}
Эта формула
nist_strength = (first_char.length()*NIST_FIRST) + (next_seven.length()*NIST_SEVEN);
всегда выдает 18, так как не учитывает состав пароля вообще. Он учитывает только длину своего первого и следующих семи символов, что всегда равно 1 * 4 + 7 * 2 = 18. Стандарт определяет различные методы оценки, основанные на составе пароля, то есть все нижние / верхние, нижние + верхние, нижние + верхние + цифры и т. Д.
Я предлагаю вам установить две переменные n1 и n7 и рассчитать их значения после проверки того, что первый и следующие 7 символов основаны на стандарте, а затем использовать их в формуле.
Надеюсь это поможет.
Других решений пока нет …