密码强度等级

本文探讨了密码强度的不同等级,包括常见密码策略、复杂性要求以及如何评估和提高密码的安全性。
摘要由CSDN通过智能技术生成

 

题目:

#include <iostream>
#include <string>

using namespace std;

int GetLen(string& s)
{
	int len = s.size();
	if (len <= 4)
		return 5;
	else if (len >= 5 && len <= 7)
		return 10;
	else
		return 25;
}


int GetGraph(string& s)
{
	int len = s.size();
	int count = 0;
	int big = 0;
	int small = 0;
	int i = 0;
	int alp = 0;
	while (i<len)
	{
		count++;
		if (isupper(s[i]))
			big++;
		else if (islower(s[i]))
			small++;

		if (isalpha(s[i]))
			alp++;

		i++;
	}

	if (alp == 0)
		return 0;
	else if (small == count || big == count)
		return 10;

	if (small > 0 && big > 0)
		return 20;

	return 0;
}

int GetDig(string& s)
{
	int dig = 0;
	int len = s.size();
	int i = 0;

	while (i < len)
	{
		if (isdigit(s[i]))
			dig++;
		i++;
	}

	if (dig == 0)
		return 0;
	else if (dig == 1)
		return 10;
	else
		return 20;
}

int GetSignal(string& s)
{
	int sig = 0;
	int i = 0;
	int len = s.size();
	while (i < len)
	{
		if (!isdigit(s[i]) && !isalpha(s[i]))
			sig++;

		i++;
	}

	if (sig == 0)
		return 0;
	else if (sig == 1)
		return 10;
	else
		return 25;
}

int GetAward(string& s)
{
	if (GetGraph(s) > 0 && GetDig(s) > 0)
	{
		if (GetSignal(s) > 0)
		{
			if (GetGraph(s) == 20) // 大小写字母  有数字,有符号
				return 5;

			return 3; //字母、数字、符号
		}
		return 2; // 字母和数字
	}
	return 0;
}

void GetPwdSecurityLevel(string& pPasswordStr)
{

	int res1 = GetLen(pPasswordStr);
	int res2 = GetGraph(pPasswordStr);
	int res3 = GetDig(pPasswordStr);
	int res4 = GetSignal(pPasswordStr);
	int res5 = GetAward(pPasswordStr);

	int res = res1 + res2 + res3 + res4 + res5;
	if (res >= 90)
		cout << "VERY_SECURE" << endl;
	else if (res >= 80)
		cout << "SECURE" << endl;
	else if (res >= 70)
		cout << "VERY_STRONG" << endl;
	else if (res >= 60)
		cout << "STRONG" << endl;
	else if (res >= 50)
		cout << "AVERAGE" << endl;
	else if (res >= 25)
		cout << "WEAK" << endl;
	else if (res >= 0)
		cout << "VERY_WEAK" << endl;
}

int main()
{
	string s;
	while (getline(cin, s))
	{
		GetPwdSecurityLevel(s);
	}
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值