世界上,每天都在发生网络攻击,每年有许多人成为黑客的受害者。网络犯罪分子总是在寻找你的密码弱点来破解并渗透你的账户。如何防范黑客成为当务之急,保护账户安全最重要的方面是密码。
我们可以通过构建自己的 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
输出结果:
❝
文章创作不易,如果您喜欢这篇文章,请关注、点赞并分享给朋友。如有意见和建议,请在评论中反馈!
❞