博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Go 检测密码强度(密码安全性)
阅读量:4188 次
发布时间:2019-05-26

本文共 2088 字,大约阅读时间需要 6 分钟。

目录


 

密码强度

在涉及修改密码的场景中,密码强度(也称密码安全性)校验是绕不开的话题。一个密码的安全性除了与密码长度相关外,也与密码所采用的字符种类有关。在不考虑密码长度的情况下,密码强度通常分为以下五类(由高到低排序):

密码强度 说明 示例
S 密码中必须存在特殊字符、大小写字母和数字 Csdn#2020
A

对特殊字符、大写字母、小写字母和数字至少存在3种

csdn#2020
B 对特殊字符、大写字母、小写字母和数字至少存在2种 csdn2020
C 对特殊字符、大写字母、小写字母和数字至少存在1种 csdn
D 不存在特殊字符、大小写字母和数字。 /、\

💡提示:特殊字符集假定为  ~!@#$%^&*?_-

 

解决方案

检测密码强度包含两个方面,一个是密码长度,另一个是包含的字符种类。对不符合长度要求的密码和字符种类范围低的密码报错返回。

 

代码

package check_pwdimport (	"fmt"	"regexp")const (	levelD = iota	LevelC	LevelB	LevelA	LevelS)func Check(minLength, maxLength, minLevel int, pwd string) error {	if len(pwd) < minLength {		return fmt.Errorf("BAD PASSWORD: The password is shorter than %d characters", minLength)	}	if len(pwd) > maxLength {		return fmt.Errorf("BAD PASSWORD: The password is logner than %d characters", maxLength)	}	var level int = levelD	patternList := []string{`[0-9]+`, `[a-z]+`, `[A-Z]+`, `[~!@#$%^&*?_-]+`}	for _, pattern := range patternList {		match, _ := regexp.MatchString(pattern, pwd)		if match {			level++		}	}	if level < minLevel {		return fmt.Errorf("The password does not satisfy the current policy requirements. ")	}	return nil}

 

代码走读

package check_pwdimport (   "fmt"   "regexp")// 密码强度等级,D为最低const (   levelD = iota   LevelC   LevelB   LevelA   LevelS)/* *  minLength: 指定密码的最小长度 *  maxLength:指定密码的最大长度 *  minLevel:指定密码最低要求的强度等级 *  pwd:明文密码 */func Check(minLength, maxLength, minLevel int, pwd string) error {   // 首先校验密码长度是否在范围内   if len(pwd) < minLength {      return fmt.Errorf("BAD PASSWORD: The password is shorter than %d characters", minLength)   }   if len(pwd) > maxLength {      return fmt.Errorf("BAD PASSWORD: The password is logner than %d characters", maxLength)   }   // 初始化密码强度等级为D,利用正则校验密码强度,若匹配成功则强度自增1   var level int = levelD   patternList := []string{`[0-9]+`, `[a-z]+`, `[A-Z]+`, `[~!@#$%^&*?_-]+`}   for _, pattern := range patternList {      match, _ := regexp.MatchString(pattern, pwd)      if match {         level++      }   }   // 如果最终密码强度低于要求的最低强度,返回并报错   if level < minLevel {      return fmt.Errorf("The password does not satisfy the current policy requirements. ")   }   return nil}

转载地址:http://gbsoi.baihongyu.com/

你可能感兴趣的文章
前世,是谁埋的我。
查看>>
J2ME技术实现的RPG游戏的DEMO(含源代码)
查看>>
J2ME开发中常见属性(Property)及其作用列表
查看>>
【文章汇总】J2ME程序开发全方位基础讲解
查看>>
MIDP2.1规范文档
查看>>
两个基础的算法题目
查看>>
编程是什么——写给编程的初学者
查看>>
Flash Lite作为S40和S60系列上的特性出现在技术规范中
查看>>
MIDP3.0(JSR271)早期规范文件发布
查看>>
数据服务笔记
查看>>
ESB架构笔记
查看>>
真正的maven私服搭建器--Artifactory
查看>>
用铁轨理论解读SOA
查看>>
从天下无贼看SOA全球化
查看>>
用SOA打造企业仪表盘
查看>>
第2届中国机器博弈锦标赛
查看>>
原始的抽象
查看>>
万王之王 – 抽象
查看>>
4. Lambda Expressions (Lambda表达式)与Expressions Tree(表达式树)
查看>>
3. Extension Methods(扩展方法)
查看>>