密码强度问题 C语言实现

2025-06-26 21:09:55
推荐回答(2个)
回答1:

提一个思路吧。
循环遍历密码,计算出密码的长度long。同时可以统计出大写字母的个数Letters和小写字母的个数letters。 以及数字的个数Number。 统计这三个数字分别调用三个函数实现, 每次传进去的参数是当前读到的字符。若匹配到,则标记变量加一。

到这里 密码长度,密码组成的分数都已经可以算出来了。最后再根据Letters,letters,Number有几个为0来确定讲理。 加起来就是最后得分了。

回答2:

头文件OJ.h
#ifndef OJ_H_
#define OJ_H_
#endif
enum SAFE_LEVEL{
very_weak = 0,
weak = 25,
average=50,
strong=60,
very_strong=70,
secure=80,
very_secure=90
};
主程序
#include
#include
#include"OJ.h"
using namespace std;
typedef struct{
bool number;
bool letter1;
bool letter2;
bool character;
}JUDGE;
int GetPwdSecurityLevel(char* pPasswordStr, SAFE_LEVEL*penumLevel);
int main()
{
char * str = "234#@sdaSDFlkd$";
SAFE_LEVEL SL;
cout << GetPwdSecurityLevel(str,&SL);
system("pause");
return 0;
}

int GetPwdSecurityLevel(char* pPasswordStr, SAFE_LEVEL*penumLevel)
{
int score = 0;
int number = 0;
int letter1 = 0;
int letter2 = 0;
int character = 0;
JUDGE judge = { false, false, false, false };
//password size
int length = strlen(pPasswordStr);
if (length == 0)
{
cout << "The length of password is not allowed." << endl;
return -1;
}
else if (length <= 4)
{
score += 5;
}
else if (length <= 7)
{
score += 10;
}
else
{
score += 25;
}
//judge the text
char temp = NULL;
for (int i = 0; i < length; i++)
{
temp = pPasswordStr[i];
if (temp >= '0'&&temp <= '9')
{
judge.number = true;
number++;
}
else if ((temp >= 'a') && (temp <= 'z'))
{
judge.letter1 = true;
letter1++;
}
else if ((temp >= 'A') && (temp <= 'Z'))
{
judge.letter2=true;
letter2++;
}
else if (((temp > 0x21) && (temp <= 0x2F)) || ((temp >= 0x3A) && (temp <= 0x40)) || ((temp >= 0x5B) && (temp <= 60)) || (temp >= 0x7B) && (temp <= 0x7E))
{
judge.character = true;
character++;
}
}
if (judge.letter1 || judge.letter2)
{
if (judge.letter1&&judge.letter2)
score += 20;
else
score += 10;
}
if (judge.number)
{
if (number > 1)
score += 20;
else
score += 10;
}
if (judge.character)
{
if (character > 1)
score += 25;
else
score += 10;
}
if (judge.character&&judge.letter1&&judge.letter2&&judge.number)
score += 5;
else if ((judge.letter1 || judge.letter2) && judge.character&& judge.number)
score += 3;
else if ((judge.letter1 || judge.letter2) && judge.number)
score += 2;
if (score>average)
{
if (score < strong)
cout << "Score:" << score << '\t' << "Average." << endl;
else if (score cout << "Score:" << score << '\t' << "Very strong." << endl;
else if (score cout << "Score:" << score << '\t' << "Secure." << endl;
else
cout << "Score:" << score << '\t' << "Very secure." << endl;
}
else
{
if (score>=weak)
cout << "Score:" << score << '\t' << "Weak." << endl;
else
cout << "Score:" << score << '\t' << "Very weak." << endl;
}
return 0;
}