最近闲的时候想自己玩玩暴力破解密码的玩法,但是当关键字过多喝位数过多的时候所需时间太长,所以半途而废,但也相出了一个比较有趣的密码生成方式,记录一下
密码生成
def generate(wei, str_list, latest=0):
"""
密码生成器
:param wei: 密码位数 int
:param str_list: 关键字列表 list
:param latest: 目前生成第几个密码, 默认为0 int
:return: 符合位数的密码
"""
str_len = len(str_list)
for i in range(0 + latest, str_len ** wei):
pwd = ''
get = i
for num in range(wei):
j = divmod(get, str_len)
pwd += str_list[j[1]]
get = j[0]
yield pwd[::-1]
if __name__ == '__main__':
for pwd in generate(3, ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]):
print(pwd)
密码复杂度正则匹配
def win10_re(pwd):
"""
win10密码复杂度匹配
:param pwd: 要匹配的密码 str
:return:
"""
i = 0
# 是否包含数字
if re.match('^.*[0-9]+.*$', pwd):
i += 1
# 是否包含小写字母
if re.match('^.*[a-z]+.*$', pwd):
i += 1
# 是否包含大写字母
if re.match('^.*[A-Z]+.*$', pwd):
i += 1
# 是否包含特殊字符(非数字、字母的字符)
if re.match("^.*[~`!@#$%^&*()_+|<>,.?/:;'\\[\\]{}\"]+.*$", pwd):
i += 1
if len(pwd) < 6:
# print('密码至少6位')
return False
elif i < 3:
# print("至少包含大写字母、小写字母、数字、特殊字符中的三类字符")
return False
else:
# print("匹配成功")
return True