利用信息熵的方法来计算一个密码的强度。
输入一个字符串,返回一个整数类型的数值,可以据此判断用户输入的密码强度的等级。
函数实现:
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时则比较安全。
好处:
不用再强迫用户同时输入数字、大小写字母以及符号。事实上,即使是纯数字密码,当长度足够长时同样可以认为它是安全的。
如有错误,敬请指正。