python - 在 Python 中测试密码的强度
问题描述
一个字符串是弱密码,如果:或者,它少于 8 个字符,或者,它是一个英文单词,函数 is_english_word( ) 为 True。
一个字符串是一个强密码,如果:它包含至少 11 个字符并且它包含至少 1 个小写字母并且它包含至少 1 个大写字母并且它包含至少 1 个数字。
如果字符串不是弱密码且不是强密码,则字符串是中等密码。
def is_english_word( string ):
with open("english_words.txt") as f:
word_list = []
for line in f.readlines():
word_list.append(line.strip())
if string in word_list:
return True
elif string == string.upper() and string.lower() in word_list:
return True
elif string == string.title() and string.lower() in word_list:
return True
else:
return False
def password_strength( string ):
lower = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
upper = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"]
for item in string:
if item in lower:
string = string.replace(item, "x")
elif item in upper:
string = string.replace(item, "y")
elif item.isnumeric():
string = string.replace(item, "n")
for item in string:
if len( string ) < 8 or is_english_word( string ) :
return 'WEAK'
elif len( string ) >= 11 and string.count("x") >= 1 and string.count("y") >= 1 and string.count("n") >= 1:
return 'STRONG'
else:
return 'MEDIUM'
print( password_strength( 'Unimaginatively' ) )
这个密码应该是“WEAK”,但输出是“MEDIUM”,我不知道我的密码有什么问题。非常感谢。
解决方案
您的代码存在许多问题;值得注意的是,在调用之前,您将用 , 替换小写字符,用,x
替换大写字符- 这意味着将调用不是英文单词。那就是让你的密码没有。y
n
is_english_word
is_english_word()
'Xyyyyyyyyyyyyyy'
'WEAK'
既然它也不是'STRONG'
,它最终是'MEDIUM'
。
作为记录,这是一个正确代码的示例,可以执行您想要的操作:
import string
def password_strength(string):
if len(string) < 8 or is_english_word(string):
return 'WEAK'
elif (len(string) > 11 and
any(ch in string.ascii_lowercase for ch in string) and
any(ch in string.ascii_uppercase for ch in string) and
any(ch.isdigit() for ch in string)):
return 'STRONG'
else:
return 'MEDIUM'
推荐阅读
- docker - 如何在 Dockerfile 中将用户输入作为文本发送?
- node.js - 使用 Node.js 通过 SQLite 插入值时的主键问题
- c++ - 使用 static_cast 创建的枚举调用 C++ 函数的安全性
- python-3.x - 每当将新数据加载到 s3 存储桶中时如何触发 python 脚本?
- javascript - 有没有办法在 Chrome 和 Firefox 中的 JavaScript 中获取触控板强制事件?
- reactjs - Reactjs - 使用 oneOfType 检查 proptypes
- python - 试图绘制特征方程的特征值(根轨迹)图作为一个变量增加但得到一个空白图?
- c++ - 使用虚函数的 C++ 中的嵌套多态性
- java - 使用 moditect 将模块信息添加到依赖项而不下载依赖项
- strapi - 在 Strapi 中查询 adminuser 的 created_by 中的名字