一、为什么要检测密码强度?

密码是保护个人信息的第一道防线。弱密码容易被暴力破解或字典攻击,强密码则需要大量时间才能被攻破。因此,写一个密码强度检测器不仅能帮助自己设置安全密码,也能作为学习Python字符串操作的实用项目。

二、检测规则

本检测器从以下五个维度给密码打分:

规则评分
长度≥8+1分
包含大写字母+1分
包含小写字母+1分
包含数字+1分
包含特殊字符(!@#$%^&*等)+2分

总分范围0-6分,评级标准:

  • 0-2分:弱密码 ❌

  • 3-4分:中等密码 ⚠️

  • 5-6分:强密码 ✅

三、完整代码

import re

def check_password_strength(password):
    """
    检测密码强度
    返回:得分、评级、具体建议
    """
    score = 0
    suggestions = []
    
    # 1. 长度检查
    if len(password) >= 8:
        score += 1
    else:
        suggestions.append("密码长度建议至少8位")
    
    # 2. 大写字母
    if re.search(r'[A-Z]', password):
        score += 1
    else:
        suggestions.append("建议包含大写字母")
    
    # 3. 小写字母
    if re.search(r'[a-z]', password):
        score += 1
    else:
        suggestions.append("建议包含小写字母")
    
    # 4. 数字
    if re.search(r'[0-9]', password):
        score += 1
    else:
        suggestions.append("建议包含数字")
    
    # 5. 特殊字符(权重更高)
    if re.search(r'[!@#$%^&*(),.?":{}|<>]', password):
        score += 2
    else:
        suggestions.append("建议包含特殊字符(如 !@#$%^&*)")
    
    # 评级
    if score <= 2:
        level = "弱密码 ❌"
    elif score <= 4:
        level = "中等密码 ⚠️"
    else:
        level = "强密码 ✅"
    
    return score, level, suggestions


# ========== 使用示例 ==========
test_passwords = [
    "123456",
    "qwerty",
    "ChenYixin2026",
    "C@t!2026$ecure"
]

print("=" * 50)
print("密码强度检测结果")
print("=" * 50)

for pwd in test_passwords:
    score, level, suggestions = check_password_strength(pwd)
    print(f"\n密码:{pwd}")
    print(f"得分:{score}/6")
    print(f"评级:{level}")
    if suggestions:
        print("改进建议:")
        for s in suggestions:
            print(f"  • {s}")

四、运行演示

text

==================================================
密码强度检测结果
==================================================

密码:123456
得分:1/6
评级:弱密码 ❌
改进建议:
  • 密码长度建议至少8位
  • 建议包含大写字母
  • 建议包含特殊字符(如 !@#$%^&*)

密码:ChenYixin2026
得分:4/6
评级:中等密码 ⚠️
改进建议:
  • 建议包含特殊字符(如 !@#$%^&*)

密码:C@t!2026$ecure
得分:6/6
评级:强密码 ✅

五、扩展思路

1. 增加弱密码黑名单

python

WEAK_PASSWORDS = ("123456", "password", "qwerty", "admin", "welcome", "iloveyou")

if pwd.lower() in WEAK_PASSWORDS:
    return "❌ 这个密码太常见了!"

2. 添加密码生成器
可以生成一个包含大小写字母、数字、特殊字符的随机密码,长度可由用户指定。

3. 用正则表达式优化检测
上面的代码已经使用了 re.search(),比手动遍历更简洁高效。

六、总结

  • 密码强度由长度、字符种类共同决定

  • 特殊字符的权重可以更高(因为更难被暴力破解)

  • re 模块的正则表达式是字符串匹配的利器

  • 此工具可用于日常密码自查,也可集成到注册系统

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐