密码复杂度检查函数

密码复杂度检测.py

 1 import  re
 2 ‘‘‘
 3 接口调用示例:
 4 import 密码复杂度检测 as pc
 5
 6 while True:
 7     str1 = input("请输入密码> ").strip()
 8     if pc.check_password_complexity(str1,2):
 9         print("%s复杂度符合要求"%str1)
10         break
11
12
13 密码复杂度检查,包括两种复杂度检查,
14 level=1时,
15     密码不能包含中文,
16     长度在10到20个字符之间
17     密码必须已字母或下划线开始
18     密码必须包含字母、数字、特殊字符
19 level-2时,
20     包含level=1的条件
21     不能有一个字符连续出现超过字符长度减8次的情况,比如字符长度是10,则不能有一个字符连续出现2次的情况
22 ‘‘‘
23 def check_password_complexity(p,level):
24     """
25
26     :param p: 传递进来的待检测的密码
27     :param level: 需要检查的强度
28     :return: 如果密码复杂度符合要求则返回True,否则返回False
29     """
30     # 判断等级是否是1或2
31     assert level in (1,2),‘level密码强度检查只能是1或2‘
32     # 判断是否包含中文
33     zhPattern = re.compile(u‘[\u4e00-\u9fa5]+‘)
34     if zhPattern.search(p):
35         print("\033[1;31;40m密码不能包含中文!\033[0m")
36     # 检查密码长度
37     elif not 10 <= len(p) <= 20:
38         print("\033[1;31;40m长度不符合要求,必须在10到20个字符之间\033[0m")
39     # 检查密码是否已字母或下划线开头
40     elif not re.match("^[a-zA-Z_]",p):
41         print("\033[1;31;40m密码必须以字母或下划线开头\033[0m")
42     # 检查是否包含数字字母和特殊字符
43     elif not (re.search(‘[\d]‘,p) and re.search(‘[a-zA-Z]‘,p) and re.search(‘[\W]‘,p)):
44         print("\033[1;31;40m密码必须包含数字字母和特殊字符\033[0m")
45     # 检查密码是否过于简单
46     elif level == 1:
47         return True
48     elif level == 2:
49         # 高级密码复杂度检查,检查字符是否连续出现超过字符串长度减8次,更高级检查待开发
50         l = len(p)-8
51         # print(l)
52         p_temp = p[:9]
53         for char in p_temp:
54             # chars = re.search(r‘[%s]{%d,}‘%(char,l),p)
55             if char*l in p:
56                 print("您的密码过于简单")
57                 print("%s重复出现超过%d次!重复次数不能超过字符长度减8次"%(char,l))
58                 return False
59             else:
60                 return True
61
62 if __name__ == ‘__main__‘:
63     print("请使用\033[1;31;0mheck_password_complexity\033[0m(\033[1;32;0mpassword,level\033[0m)调用此函数")
时间: 2024-08-08 01:29:37

密码复杂度检查函数的相关文章

检查密码复杂度的C#正则表达式

原文:检查密码复杂度的C#正则表达式 在用户注册与修改.重置密码时,强制密码达到一定的复杂度,是减少盗号的有效措施之一. 而在代码中检查密码复杂度就需要用到正则表达式,比如要求密码必须包含数字.小写或大写字母.特殊字符.字符数在8-30之间,对应的正则表达式如下: var regex = new Regex(@" (?=.*[0-9]) #必须包含数字 (?=.*[a-zA-Z]) #必须包含小写或大写字母 (?=([\x21-\x7e]+)[^a-zA-Z0-9]) #必须包含特殊符号 .{8

[转] 检查密码复杂度的 C# 正则表达式

在用户注册与修改.重置密码时,强制密码达到一定的复杂度,是减少盗号的有效措施之一. 而在代码中检查密码复杂度就需要用到正则表达式,比如要求密码必须包含数字.小写或大写字母.特殊字符.字符数在 8-30 之间,对应的正则表达式如下: var regex = new Regex(@" (?=.*[0-9]) #必须包含数字 (?=.*[a-zA-Z]) #必须包含小写或大写字母 (?=([\x21-\x7e]+)[^a-zA-Z0-9]) #必须包含特殊符号 .{8,30} #至少8个字符,最多30

js正则表达式:验证邮箱格式、密码复杂度、手机号码、QQ号码

直接上代码 Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83

Linux下pam密码复杂度限制

linux系统是如何实现对用户的密码的复杂度的检查的呢?系统对密码的控制是有两部分组成:1 cracklib2 /etc/login.defs pam_cracklib.so 才是控制密码复杂度的关键文件/lib/security/pam_cracklib.soredhat公司专门开发了cracklib这个安装包来判断密码的复杂度 # rpm -qa | grep cracklibcracklib-2.8.9-3.1 \\检查软件是否安装cracklib-dicts-2.8.9-3.1 \\密码

Linux 密码复杂度

我们在使用linux系统设置密码的时候,经常遇到这样的问题,系统提示:您的密码太简单,或者您的密码是字典的一部分.那么系统是如何实现对用户的密码的复杂度的检查的呢? 系统对密码的控制是有两部分(我知道的)组成: 1 cracklib 2 login.defs 声明:login.defs主要是控制密码的有效期.对密码进行时间管理.此处不细谈. login.defs --shadow password suite configuration pam_cracklib.so 才是控制密码复杂度的关键文

linux加固安全之密码复杂度

随着linux系统使用的普遍性,对linux用户及系统安全要求也随之提升,单纯从单位制度,用户安全意识上来规范,并不能杜绝弱口令,必须从技术上要求用户定时修改复杂的密码,从而提高用户和系统的安全性. 密码策略的2个基本 一个密码最长使用期限,另一个是密码复杂度:这两个分别是/etc/login.defs 和/etc/pam.d/system-auth来控制. 1. vi /etc/login.defs PASS_MAX_DAYS 90 #密码最长使用期限 PASS_MIN_DAYS 5 #密码最

SQL Server对比两字段的相似度(函数算法)

原文:SQL Server对比两字段的相似度(函数算法) 相似度函数 概述    比较两个字段的相似度    最近有人问到关于两个字段求相似度的函数,所以就写了一篇关于相似度的函数,分别是“简单的模糊匹配”,“顺序匹配”,“一对一位置匹配”.在平时的这种函数可能会需要用到,可能业务需求不一样,这里只给出参照,实际情况可以相对修改. 本文所有的两个字段比较都是除以比较字段本身,例如A与B比较,找出的长度除以A的长度,因为考虑如果A的长度大于B的长度,相似度会超100%,例如‘abbc’,'ab'.

密码复杂度

1.密码有效期 cp /etc/login.defs /etc/login.defs.bak vim /etc/login.defs # Password aging controls: # # PASS_MAX_DAYS Maximum number of days a password may be used. # PASS_MIN_DAYS Minimum number of days allowed between password changes. # PASS_MIN_LEN Min

编译器检查函数声明和函数实际调用参数之间的格式化字符串是否匹配

背景 在输出日志时 被 RUNLOG_DEBUG("%s,%d", para_int, para_str.c_str()) 坑过, 才知道 能校验 格式化字符串和 字段本身是否匹配 的重要性: 参考文献:https://www.cnblogs.com/marvin-notes/p/4482805.html 感谢原作者 方法 attribute format 该属性 可以给被声明的 函数 加上 类似 printf /scanf 的特征, 能用于 编译器检查 函数声明和时间调用参数直接的