你的密码有多强?使用Python检查密码安全性

云课堂学Python 2024-04-13 12:05:20

世界上,每天都在发生网络攻击,每年有许多人成为黑客的受害者。网络犯罪分子总是在寻找你的密码弱点来破解并渗透你的账户。如何防范黑客成为当务之急,保护账户安全最重要的方面是密码。

我们可以通过构建自己的 Python 程序来检查密码强度,从而学习如何使用最佳密码保护账户安全。

设置强密码规则

1.密码长度应至少为 12 个字符。

2.密码应该是包含小写字母、大写字母、数字和特殊字符的组合。

3.避免在密码中重复字符。

4.密码不应包含个人信息,例如姓名、电话号码、身份证号码或可以轻松猜到的任何内容。

5.密码不应该包含常见的单词。

6.多个账户的密码不应相同。可以设置密码管理器来自动填充各个账户的不同密码。

使用 getpass 模块隐藏输入的密码

使用 getpass 模块在用户输入密码时隐藏密码。这有助于在公共场合键入密码时保护你的密码。

「安装 getpass」

pip install getpass4

import getpasspassword=getpass.getpass("请输入密码:")

使用以上代码时,不要在 Python 编辑器中运行代码,请在命令提示符中使用命令执行python 文件名,否则无法输入密码。

使用 string 模块检测密码字符

使用 string 模块中的字符常量检测密码包含的字符并统计小写字母、大写字母、数字和特殊字符的数量。

import stringdef check(password): lower=0 upper=0 number=0 special=0 for char in list(password): if char in string.ascii_lowercase: lower+=1 elif char in string.ascii_uppercase: upper+=1 elif char in string.digits: number+=1 else: special+=1检测密码长度

如果密码长度大于 12,则 length 的值递增 1。

if len(password) >= 12: length += 1 检测重复字符

collections是Python内建的一个集合模块,提供了许多有用的集合类和方法,可以把它理解为一个容器。

若要检查密码中的字符是否重复,可以使用 collections 的 Counter 方法对密码中的元素计数。如果存在字符计数大于 1,使用 repeated 保存重复的字符。

import collectionsWords = collections.Counter(password)repeated = [i for i in Words if Words[i] > 1]检测弱密码

需要一个密码列表或数据库来检查用户的密码是否是弱密码。我们可以从 GitHub 提供的 SecLists 库中下载一百万个最受常用的密码,存为文本文件 password_list.txt,检测密码是否在弱密码文件中。如果用户输入的密码不在常用密码列表中,则 common 的值递增 1。

with open("password_list.txt", 'r') as file: content = file.read() if password not in content: common += 1密码强度评分 strength = 0 if lower >=1: strength+=1 if upper >=1: strength+=1 if number >= 1: strength+=1 if special >= 1: strength+=1 if length == 1: strength+=1 if common == 1: strength+=1 if len(repeated) == 0: strength+=1

如果密码包含小写字母、大写字母、数字和特殊字符,各加 1 分;如果密码长度大于 12,加 1分;如果密码不在常用密码列表中,加 1分;如果密码中不存在重复字符,加 1分。

输出密码强度得分

根据密码的强度,程序将显示密码相关信息以及分数。

#完整代码import stringimport collectionsimport getpassdef check(password): lower=0 upper=0 number=0 special=0 length=0 common=0 for char in list(password): if char in string.ascii_lowercase: lower+=1 elif char in string.ascii_uppercase: upper+=1 elif char in string.digits: number+=1 else: special+=1 with open("password_list.txt", 'r') as file: content = file.read() if password not in content: common += 1 Words = collections.Counter(password) repeated = [i for i in Words if Words[i] > 1] if len(password) >= 12: length += 1 strength = 0 if lower >=1: strength+=1 if upper >=1: strength+=1 if number >= 1: strength+=1 if special >= 1: strength+=1 if length == 1: strength+=1 if common == 1: strength+=1 if len(repeated) == 0: strength+=1 print(f"""你的密码包含:- {lower} 个小写字母; {upper} 个大写字母; {number} 个数字; {special} 个特殊字符; {length} 密码位数(1:合格;0:不合格); {common} 弱密码(1:不是;0:是); {repeated} 重复字符; 密码强度得分: {strength}/7""")print("密码强度检测")password=getpass.getpass("请输入密码:")check(password)

「测试:」

输入密码:ASD!@#fgh123

输出结果:

文章创作不易,如果您喜欢这篇文章,请关注、点赞并分享给朋友。如有意见和建议,请在评论中反馈!

0 阅读:0