博客
关于我
用Python写密码强度测试程序!原理居然就是这样!
阅读量:238 次
发布时间:2019-03-01

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

概述

小时候申请QQ账号时,经常被密码设置难住,设置高强度密码咋就这么难呢。今天,就着手写一个判断密码强度的程序。

通常密码设置有以下三点要求:1、字符长度需在8-16位之间;2、不能使用空格、中文字符;3、至少含有数字/字母/字符2种组合。另外,针对密码强度,笔者就不设置太复杂的规则了,在满足上述3个条件的基础上,密码有数字/字母/字符2种组合为密码强度中,有数字/字母/字符3种组合为密码强度高。

下面就开始吧= ^ =

思路

1、首先可以分别编写三个函数,分别判断密码中的字符类型(数字/字母/字符);

2、然后编写一个判断合法性程序,判断密码长度、字符类型以及组合形式是否合法;
3、最后编写主程序,按密码要求思路调用上述1和2中函数,即可完成密码强度判断

代码解析

1、数字判断

def check_number(password):     for c in password:        if c.isnumeric(): # str.isnumeric()用于判断字符串是否只包含数字字符            return True            break # 遍历密码,遇到数字字符及函数返回True并结束遍历;若遍历完所有字符无数字字符,则函数返回为None(假)

2、字母判断

def check_letter(password):    for c in password:        if 'a'<=c<='z' or 'A'<=c<='Z':            return True            break

3、字符判断

def check_mark(password):    for c in password:        if not (c.isnumeric() or 'a'<=c<='z' or 'A'<=c<='Z'):            return True            break

4、合法性判断

def check_legal(password):    if len(password)<8 or len(password)>16:        print('长度需为8-16个字符,请重新输入。')        return False    else:        for i in password:            if 0x4e00<=ord(i)<=0x9fa5 or ord(i)==0x20: # Ox4e00等十六进制数分别为中文字符和空格的Unicode编码                print('不能使用空格、中文,请重新输入。') # ord(c)用于返回一个字符c的Unicode数值                return False        else:            key = 0            key += 1 if check_number(password) else 0            key += 1 if check_letter(password) else 0            key += 1 if check_mark(password) else 0            if key >= 2:                return True            else:                print('至少含数字/字母/字符2种组合,请重新输入。')                return False

5、主程序

def main():    while True:        password = input('请输入密码:')        if check_legal(password):            strength_level = 0            strength_level += 1 if check_number(password) else 0            strength_level += 1 if check_letter(password) else 0            strength_level += 1 if check_mark(password) else 0            if strength_level == 2:                print('密码设置成功!'+'*'*10+'强度等级中'+'*'*10)                break            else:                print('密码设置成功!'+'*'*10+'强度等级高'+'*'*10)                break                    else:            continue

完整代码、效果展示

def check_number(password):    for c in password:        if c.isnumeric():            return True            breakdef check_letter(password):    for c in password:        if 'a'<=c<='z' or 'A'<=c<='Z':            return True            breakdef check_mark(password):    for c in password:        if not (c.isnumeric() or 'a'<=c<='z' or 'A'<=c<='Z'):            return True            breakdef check_legal(password):    if len(password)<8 or len(password)>16:        print('长度需为8-16个字符,请重新输入。')        return False    else:        for i in password:            if 0x4e00<=ord(i)<=0x9fa5 or ord(i)==0x20: # Ox4e00等十六进制数分别为中文字符和空格的Unicode编码                print('不能使用空格、中文,请重新输入。')                return False        else:            key = 0            key += 1 if check_number(password) else 0            key += 1 if check_letter(password) else 0            key += 1 if check_mark(password) else 0            if key >= 2:                return True            else:                print('至少含数字/字母/字符2种组合,请重新输入。')                return False          def main():    while True:        password = input('请输入密码:')        if check_legal(password):            strength_level = 0            strength_level += 1 if check_number(password) else 0            strength_level += 1 if check_letter(password) else 0            strength_level += 1 if check_mark(password) else 0            if strength_level == 2:                print('密码设置成功!'+'*'*10+'强度等级中'+'*'*10)                break            else:                print('密码设置成功!'+'*'*10+'强度等级高'+'*'*10)                break                    else:            continueif __name__ == '__main__':    main()

代码量很少,如果需要源码的可加下我的交流群:1136192749

 

 

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

你可能感兴趣的文章
NBear简介与使用图解
查看>>
Vue过滤器_使用过滤器进行数据格式化操作---vue工作笔记0015
查看>>
Ncast盈可视 高清智能录播系统 IPSetup.php信息泄露+RCE漏洞复现(CVE-2024-0305)
查看>>
NCNN中的模型量化解决方案:源码阅读和原理解析
查看>>
NCNN源码学习(1):Mat详解
查看>>
nc命令详解
查看>>
NC综合漏洞利用工具
查看>>
ndarray 比 recarray 访问快吗?
查看>>
ndk-cmake
查看>>
NdkBootPicker 使用与安装指南
查看>>
ndk特定版本下载
查看>>
NDK编译错误expected specifier-qualifier-list before...
查看>>
Neat Stuff to Do in List Controls Using Custom Draw
查看>>
Necurs僵尸网络攻击美国金融机构 利用Trickbot银行木马窃取账户信息和欺诈
查看>>
Needle in a haystack: efficient storage of billions of photos 【转】
查看>>
NeHe OpenGL教程 07 纹理过滤、应用光照
查看>>
NeHe OpenGL教程 第四十四课:3D光晕
查看>>
Neighbor2Neighbor 开源项目教程
查看>>
neo4j图形数据库Java应用
查看>>
Neo4j图数据库_web页面关闭登录实现免登陆访问_常用的cypher语句_删除_查询_创建关系图谱---Neo4j图数据库工作笔记0013
查看>>