C语言 计算密码强度

利用信息熵的方法来计算一个密码的强度。

输入一个字符串,返回一个整数类型的数值,可以据此判断用户输入的密码强度的等级。

函数实现:

int strength(char* m)  //m为输入的密码
{
	double complexity = 0;
	BOOL C[4];
	char n;
	int i,len;
    len = strlen(m)    //字符串长度
	for (i = 0; i < 4; i++) C[i] = FALSE;    //初始化数组C
	for (i = 0; i < len; i++)      //判断字符串包含“数字,小写字母,大写字母,符号”的哪几种
	{
		n = m[i];
		C[0] = C[0] || isdigit(n);					//数字
		C[1] = C[1] || islower(n);					//小写字母
		C[2] = C[2] || isupper(n);					//大写字母
		C[3] = C[3] || !isalnum(n);            		//符号
	}
	if (C[0]) complexity += 10;    //0-9共10个数字
	if (C[1]) complexity += 26;    //a-z共26个小写字母
	if (C[2]) complexity += 26;    //A-Z共26个大写字母
	if (C[3]) complexity += 50;    //50个符号
	complexity = log2(complexity);    //取对数
	complexity *= len;                //得到最终的结果
	return (int)complexity;    //返回结果
}

返回值可以作为判断密码强度的标准,例如:当返回值在区间[0,50]时,可以认为密码是不安全的,在区间[50,70]时是中等强度密码,大于70时则比较安全。

好处:

不用再强迫用户同时输入数字、大小写字母以及符号。事实上,即使是纯数字密码,当长度足够长时同样可以认为它是安全的。

如有错误,敬请指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值