基于规则评分的密码强度检测算法分析及实现(JavaScript)

用正则表达式做用户密码强度的通过性判定,过于简单粗暴,不但用户体验差,而且用户帐号安全性也差。那么如何准确评价用户密码的强度,保护用户帐号安全呢?本文分析介绍了几种基于规则评分的密码强度检测算法,并给出了相应的演示程序。大家可以根据自己项目安全性需要,做最适合于自己的方案选择。

1 方案1 (简单)

方案1算法通过密码构成分析,结合权重分派,统计得出密码强度得分。得分越高,表示密码强度越大,也就越安全。方案1算法思想简单,实现容易。

1.1 方案1评分标准

一、密码长度:

5 分: 小于等于4 个字符

10 分: 5 到7 字符

25 分: 大于等于8 个字符

二、字母:

0 分: 没有字母

10 分: 全都是小(大)写字母

20 分: 大小写混合字母

三、数字:

0 分: 没有数字

10 分: 1 个数字

20 分: 大于1 个数字

四、符号:

0 分: 没有符号

10 分: 1 个符号

25 分: 大于1 个符号

五、奖励:

2 分: 字母和数字

3 分: 字母、数字和符号

5 分: 大小写字母、数字和符号

1.2 方案1等级划分

根据密码评分,将密码划分成以下7个等级:

>= 90: 非常安全(VERY_SECURE)

>= 80: 安全(SECURE)

>= 70: 非常强(VERY_STRONG)

>= 60: 强(STRONG)

>= 50: 一般(AVERAGE)

>= 25: 弱(WEAK)

>= 0: 非常弱( VERY_WEAK)

该评分标准及等级划分,实际使用时,可小做调整,但不建议做大的变动。

1.3 方案1演示程序

演示程序

1.4 方案1测试分析

// 评分 25,纯小写字母无法通过验证 console.log("aaaaaaaa".score()); // 评分 45,纯数字无法通过验证 console.log("11111111".score()); // 评分 47,小写+数字无法通过验证 console.log("aa111111".score()); // 评分 45,小写+大写无法通过验证 console.log("aaaaAAAA".score()); // 评分 50,4位密码不可能通过验证 console.log("11!!".score()); // 评分 70,5位密码可通过验证 console.log("0aA!!".score()); // 评分 67,小写+大写+数字可通过验证(8位) console.log("aA000000".score()); // 评分 70,数字+符号可通过验证 console.log("000000!!".score());

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdxsf.html