Python脚本实现WiFi密码强度本地评估与安全加固指南

发布时间:2026/7/2 9:50:20
Python脚本实现WiFi密码强度本地评估与安全加固指南 1. 项目概述为什么你需要关心自家WiFi密码强度家里的WiFi密码是不是还在用“12345678”或者“88888888”又或者是家人的生日、手机号如果你点头了那这篇文章就是为你准备的。作为一名经常和网络、脚本打交道的从业者我见过太多因为WiFi密码太弱而被“蹭网”甚至导致家庭网络被当作跳板引发更严重安全问题的案例。今天我们不谈那些复杂的、需要特殊硬件的攻击手段就聊聊如何用一个简单的Python脚本像给自己家做一次“安全体检”一样科学地评估你当前WiFi密码的强度并告诉你如何设置一个既安全又好记的新密码。这个脚本的核心思路很简单它不会去尝试连接你的WiFi更不会去“破解”任何网络。它的工作完全是离线的、本地的。脚本会模拟一个攻击者的常见思路对你的密码进行一系列“压力测试”比如检查长度、字符复杂度、是否出现在常见弱密码字典里、是否容易被社会工程学猜到比如包含姓名、日期。最终它会给你一个量化的评分和具体的改进建议。整个过程安全、合法目的纯粹是提升你自己的安全意识。无论你是刚学Python的新手还是想给家里的长辈科普网络安全这个工具都足够直观和实用。2. 脚本核心设计与思路拆解2.1 离线评估 vs. 在线攻击划清安全与违法的界限首先必须明确一个原则我们编写这个脚本的目的是进行防御性安全评估而非攻击。在线破解WiFi密码如使用Kali Linux下的Aircrack-ng套件进行抓包和暴力破解在未经授权的情况下测试他人网络是明确违法的行为且通常需要网卡支持监控模式等特定硬件条件。我们的脚本则完全不同它运行在你自己的电脑上输入是你自己设定的密码或假设的密码所有计算和比对都在本地完成不发送任何网络数据包。这就像你用密码管理器检查自己密码的强度一样是纯粹的自我安全审计工具。注意任何试图未经授权访问他人计算机网络的行为无论出于何种目的都是非法的。本脚本及指南严格限定于对自有或已获明确授权测试的网络密码进行强度分析。2.2 密码强度评估的四个维度一个健壮的密码评估模型应该从多个角度审视密码。我们的脚本主要围绕以下四个核心维度构建评分体系长度基础分这是密码安全的基石。密码每增加一位攻击者需要尝试的可能性就呈指数级增长。我们会设置一个基础长度要求如8位并给予超额长度奖励分。字符复杂度分密码是否混合使用了大小写字母、数字和特殊符号如 !#$%。单一的字符类型会大大降低密码空间。字典抗性分密码是否出现在常见的弱密码字典、泄露密码库中。攻击者首先尝试的就是这些现成的列表。我们会内置或加载一个常见的弱密码字典进行比对。模式抗性分密码是否包含容易被猜到的模式如连续数字123、连续字母abc、重复字符aaaa、键盘相邻键qwerty、以及个人信息姓名、生日、电话号码片段。脚本将根据这四个维度分别打分然后加权汇总得到一个最终的综合强度评分例如0-100分并给出定性的等级如非常弱、弱、中等、强、非常强。2.3 技术选型为什么用PythonPython是实现这个想法的绝佳选择。首先它的字符串处理能力强大正则表达式库re可以轻松匹配各种模式。其次文件操作简单便于我们加载外部的弱密码字典文件。再者Python拥有丰富的内置函数和清晰的语法使得编写评分逻辑和输出美观的报告变得非常容易。最后其跨平台特性意味着无论你在Windows、macOS还是Linux上脚本都能无缝运行。对于初学者而言这也是一个绝佳的实战项目能综合运用变量、循环、条件判断、函数定义和文件读写等核心知识点。3. 核心模块解析与代码实现要点3.1 环境准备与依赖安装这个脚本几乎不需要任何第三方库仅使用Python标准库确保了最大的兼容性和便捷性。你只需要一个能运行Python 3.6及以上版本的环境即可。如果你不确定是否安装了Python可以在终端Windows上是CMD或PowerShellmacOS/Linux上是Terminal中输入python --version或python3 --version来查看。如果显示“不是内部或外部命令”或“command not found”则需要先去Python官网下载安装。安装过程很简单记得勾选“Add Python to PATH”选项Windows以便在命令行直接使用。实操心得对于新手我强烈推荐使用VSCode作为代码编辑器。安装Python扩展后它提供了语法高亮、代码提示、调试等功能体验非常好。在VSCode中你可以直接新建一个.py文件然后按F5选择Python环境运行非常方便。3.2 密码强度评估函数详解我们将评估逻辑封装在几个独立的函数里这样代码结构清晰也便于后续扩展或调试。下面我们来逐一拆解核心函数。3.2.1 长度与复杂度评分 (evaluate_length_complexity)这个函数负责最基础的两项检查。长度评分我们采用阶梯式奖励达到8位给基础分超过8位后每多一位都有额外加分鼓励使用长密码。复杂度评分则通过检查密码中是否包含四类字符小写、大写、数字、特殊符号来计分每包含一类就加分。import re def evaluate_length_complexity(password): 评估密码长度和字符复杂度。 返回一个包含长度得分和复杂度得分的元组。 score 0 length len(password) # 长度评分 length_score 0 if length 8: length_score 20 # 达到最低安全标准给基础分 if length 8: length_score min((length - 8) * 3, 30) # 8位以后每多一位加3分上限30分 # 字符复杂度评分 complexity_score 0 # 检查是否包含小写字母 if re.search(r[a-z], password): complexity_score 10 # 检查是否包含大写字母 if re.search(r[A-Z], password): complexity_score 10 # 检查是否包含数字 if re.search(r\d, password): complexity_score 10 # 检查是否包含特殊符号 if re.search(r[!#$%^*(),.?\:{}|], password): complexity_score 10 return length_score, complexity_score注意事项这里的评分权重20, 3, 10是我根据经验设定的你可以根据自己对不同维度的重视程度进行调整。例如如果你认为长度比复杂度更重要可以提高长度评分的权重。3.2.2 字典检查 (check_against_dictionary)这是防御“懒人攻击”的关键。攻击者首先会尝试一个包含几万甚至上亿常用密码的字典。我们的脚本需要加载一个本地的弱密码字典文件例如common_passwords.txt然后检查待测密码是否在其中。def check_against_dictionary(password, dict_pathcommon_passwords.txt): 检查密码是否存在于常见弱密码字典中。 返回一个布尔值True表示在字典中弱False表示不在。 try: with open(dict_path, r, encodingutf-8, errorsignore) as f: # 将字典文件读入一个集合便于快速查找 common_passwords set(line.strip().lower() for line in f) return password.lower() in common_passwords except FileNotFoundError: print(f警告字典文件 {dict_path} 未找到跳过字典检查。) return False # 如果文件不存在默认不在字典中如何获取弱密码字典你可以在GitHub上搜索rockyou.txt或common passwords list找到很多开源资源。rockyou.txt是一个因数据泄露而公开的包含千万级密码的著名文件其前几万条最常见密码就足以用于我们的测试。请务必仅将此类文件用于合法的安全测试目的。实操心得在实际使用中完整的rockyou.txt文件很大。我建议只取前10万行或自己整理一个更精简的、针对中文环境常见的弱密码列表如“123456”、“password”、“wobushi”、“admin123”等这样脚本运行速度会快很多。你可以创建一个common_passwords.txt文件每行放一个弱密码。3.2.3 模式检查 (check_patterns)这个函数用于识别那些看似复杂但实则很有规律的“弱模式”密码。我们使用正则表达式来匹配这些模式。def check_patterns(password): 检查密码中是否包含常见的弱模式。 返回一个列表包含检测到的所有模式描述。 patterns_detected [] # 连续数字 (如 123, 987) if re.search(r(012|123|234|345|456|567|678|789|987|876|765|654|543|432|321|210), password): patterns_detected.append(包含连续数字) # 连续字母 (如 abc, cba) if re.search(r(abc|bcd|cde|def|efg|fgh|ghi|hij|ijk|jkl|klm|lmn|mno|nop|opq|pqr|qrs|rst|stu|tuv|uvw|vwx|wxy|xyz), password.lower()): patterns_detected.append(包含连续字母) # 重复字符 (如 aaaa, 1111) if re.search(r(.)\1{2,}, password): # 同一个字符重复3次或以上 patterns_detected.append(包含重复字符) # 键盘相邻键序列 (如 qwerty, asdfgh) keyboard_patterns [qwerty, asdfgh, zxcvbn, poiuyt, lkjhgf, mnbvcx] for pat in keyboard_patterns: if pat in password.lower(): patterns_detected.append(f包含键盘相邻键序列 {pat}) break # 简单年份 (如 1980-2025) if re.search(r(19[7-9]\d|20[0-2]\d), password): patterns_detected.append(包含可能为出生年份的数字) return patterns_detected注意事项模式检查的规则可以无限扩展。这里只列举了几种最典型的。你还可以添加检查手机号前三位、姓名拼音等更个性化的规则。关键在于这些规则能帮你发现密码中“人为的规律性”而规律性是安全的大敌。3.3 综合评分与报告生成将所有模块的分数汇总并生成一份易于理解的报告是脚本的最终输出环节。def calculate_final_score(length_score, complexity_score, in_dictionary, patterns_detected): 根据各维度结果计算最终得分和等级。 # 基础分 total_score length_score complexity_score # 字典惩罚如果在字典中扣重分 if in_dictionary: total_score - 50 # 一票否决性质的扣分 # 模式惩罚每种检测到的模式扣分 pattern_penalty len(patterns_detected) * 15 total_score - pattern_penalty # 确保分数在0-100之间 total_score max(0, min(100, total_score)) # 评定等级 if total_score 80: level 非常强 elif total_score 60: level 强 elif total_score 40: level 中等 elif total_score 20: level 弱 else: level 非常弱 return total_score, level def generate_report(password, length_score, complexity_score, in_dict, patterns, final_score, level): 生成并打印详细的评估报告。 print(\n *50) print(WiFi密码强度评估报告) print(*50) print(f评估密码: {password[:5]}...{password[-2:] if len(password)7 else }) # 部分隐藏 print(f密码长度: {len(password)} 位) print(-*50) print(f1. 长度评分: {length_score}/50) print(f2. 复杂度评分: {complexity_score}/40) print(f3. 字典检查: {❌ 存在于常见弱密码库中严重风险 if in_dict else ✅ 未在常见弱密码库中发现}) if patterns: print(f4. 模式检查: 检测到以下弱模式:) for p in patterns: print(f - {p}) else: print(f4. 模式检查: ✅ 未检测到明显弱模式) print(-*50) print(f综合强度得分: {final_score}/100) print(f安全等级: 【{level}】) print(*50) # 根据结果给出建议 print(\n【改进建议】) if final_score 60: print(⚠️ 您的密码安全性不足建议立即修改) if len(password) 12: print( → 优先增加密码长度目标12位以上。) if complexity_score 30: print( → 混合使用大小写字母、数字和特殊符号。) if in_dict: print( → 您的密码过于常见必须更换为独特组合。) if patterns: print( → 避免使用连续、重复或与个人信息明显相关的字符。) else: print(✅ 您的密码安全性良好请保持。) print( → 定期如每年检查一次密码强度是个好习惯。)这个报告模块将枯燥的数字转化为了直观的等级和 actionable 的建议让非技术用户也能一目了然。4. 完整脚本组装与使用教程4.1 主程序逻辑与交互我们将上述函数整合起来并添加一个简单的主程序入口支持直接输入密码或从文件读取批量测试。def main(): 主函数提供交互式界面。 print(WiFi密码本地强度评估工具) print(说明所有评估均在本地进行不会上传任何信息。) mode input(请选择模式1. 测试单个密码 2. 从文件批量测试 (输入1或2): ).strip() if mode 1: # 隐藏输入增强体验注意在部分IDE终端中可能无法隐藏 import getpass password getpass.getpass(请输入待评估的WiFi密码: ) if not password: print(密码不能为空) return evaluate_single_password(password) elif mode 2: file_path input(请输入包含密码列表的文件路径每行一个密码: ).strip() try: with open(file_path, r, encodingutf-8) as f: passwords [line.strip() for line in f if line.strip()] print(f从文件读取到 {len(passwords)} 个密码。) for idx, pwd in enumerate(passwords, 1): print(f\n 正在评估第 {idx} 个密码...) evaluate_single_password(pwd) except FileNotFoundError: print(f错误文件 {file_path} 未找到。) else: print(输入无效程序退出。) def evaluate_single_password(password): 评估单个密码的完整流程 # 1. 长度与复杂度 length_score, complexity_score evaluate_length_complexity(password) # 2. 字典检查 in_dictionary check_against_dictionary(password) # 3. 模式检查 patterns_detected check_patterns(password) # 4. 综合评分 final_score, level calculate_final_score(length_score, complexity_score, in_dictionary, patterns_detected) # 5. 生成报告 generate_report(password, length_score, complexity_score, in_dictionary, patterns_detected, final_score, level) if __name__ __main__: main()4.2 如何运行脚本保存代码将上述所有代码块按顺序复制保存到一个文件中例如wifi_password_checker.py。准备字典文件在同一个目录下创建一个common_passwords.txt文件里面每行放一个弱密码。你可以从网上下载精简版或自己手动输入一些例如123456 password 12345678 qwerty 123456789 12345 1234 111111 1234567 dragon ...运行脚本打开终端命令行导航到脚本所在目录运行python wifi_password_checker.py或python3 wifi_password_checker.py。交互操作根据提示选择模式输入密码即可看到评估报告。4.3 脚本运行效果示例假设我们用密码ZhangSan2024!进行测试输出报告可能如下 WiFi密码强度评估报告 评估密码: Zhang...4! 密码长度: 14 位 -------------------------------------------------- 1. 长度评分: 38/50 2. 复杂度评分: 40/40 3. 字典检查: ✅ 未在常见弱密码库中发现 4. 模式检查: ✅ 未检测到明显弱模式 -------------------------------------------------- 综合强度得分: 78/100 安全等级: 【强】 【改进建议】 ✅ 您的密码安全性良好请保持。 → 定期如每年检查一次密码强度是个好习惯。这个密码得分很高因为它长度足够14位包含了所有四类字符且不在常见字典中也没有明显的弱模式。5. 超越脚本构建真正防破解的WiFi安全体系脚本帮你发现了问题但更重要的是解决问题。评估出弱密码后你应该立即修改路由器上的WiFi密码。下面是一些制定“强密码”和提升整体WiFi安全性的实战指南。5.1 创建高强度易记忆密码的实战技巧“又长又复杂”的密码记不住试试这些方法口诀造句法取一句你喜欢的歌词、诗词或自己编的一句话取每个字的首字母并加入数字和符号。例句“两岸猿声啼不住轻舟已过万重山 2024”转化Laystbcqzygwzs2024!评估长度20包含大小写、数字、符号且毫无规律强度极高。核心词替换法选择一个基础词进行系统化替换。基础词MyHomeWiFi替换规则M-13,y-Y,o-0,e-3,i-!(可自定义)转化13H0m3W!F!评估将简单的单词变成了难以猜测的字符串。随机密码管理器这是最安全省事的方法。使用Bitwarden、1Password、KeePass等密码管理器生成并保存一个20位以上的完全随机密码如Xq$9kLp2#FvwY5!zR8*Pm。你只需要记住密码管理器的主密码即可。实操心得对于家庭WiFi我强烈推荐“口诀造句法”。它平衡了安全性和可用性。你可以把生成密码的“口诀”写在只有自己知道的地方比如一本不相关的书里做标记而不是直接写密码本身。5.2 路由器安全设置进阶指南改完密码只是第一步路由器的其他安全设置同样重要启用WPA3/WPA2加密确保你的路由器无线加密方式为WPA3-Personal最新最安全或WPA2-Personal (AES)。绝对不要使用WEP 或 WPA/TKIP这些加密方式早已被轻易破解。隐藏SSID网络名称在路由器设置中关闭“广播SSID”。这样普通的设备扫描就看不到你的网络名称了需要手动输入SSID才能连接。这增加了攻击者的发现难度。启用MAC地址过滤这是一个较为严格的措施。将你家所有设备的MAC地址手机、电脑、平板、智能家居设备添加到路由器的“允许列表”中。这样即使有人知道了密码不在列表上的设备也无法连接。缺点是添加新设备稍显麻烦。关闭WPS功能Wi-Fi Protected Setup (WPS) 的本意是方便连接但其PIN码验证方式存在严重漏洞可以在几小时内被暴力破解。请务必在路由器设置中禁用WPS。固件更新定期登录路由器管理后台通常是192.168.1.1或192.168.0.1检查并安装最新的固件更新。这些更新往往包含重要的安全补丁。修改默认管理密码路由器的管理后台密码不要使用出厂默认的admin/admin务必修改为一个强密码且不要与WiFi密码相同。5.3 家庭网络隔离与设备管理对于有智能家居或访客较多的家庭可以考虑更细致的网络管理启用访客网络几乎所有现代路由器都支持此功能。为来访的朋友单独开启一个访客网络设置一个不同的、有时效性的密码。并将访客网络与你的主网络连接着电脑、手机、NAS隔离防止潜在风险蔓延。IoT设备单独分组将智能电视、摄像头、音箱等IoT设备连接到一个专门的WiFi网络或VLAN中并限制它们访问你主要设备如电脑、手机的权限。很多IoT设备安全性较差这样做可以将其可能带来的风险控制在最小范围。6. 常见问题与排查技巧实录在实际使用脚本和配置路由器的过程中你可能会遇到以下问题6.1 脚本运行相关Q1: 运行脚本时提示“No module named ‘getpass’”之类的错误A:getpass是Python标准库的一部分理论上不会缺失。如果报错可能是你的Python环境异常。尝试在脚本开头打印import sys; print(sys.version)确认Python版本。更常见的是在部分集成开发环境IDE或某些终端中getpass.getpass()函数可能无法正常隐藏输入密码会显示出来。这是环境问题不影响脚本逻辑可以暂时改用普通的input()函数但注意这样会在屏幕上留下密码记录。Q2: 字典检查部分总是显示“文件未找到”怎么办A: 请确保common_passwords.txt文件和你的wifi_password_checker.py脚本放在**同一个文件夹目录**下。或者你可以在check_against_dictionary函数调用时传入字典文件的完整绝对路径如check_against_dictionary(password, dict_path‘C:/Users/YourName/Desktop/common_passwords.txt’)。Q3: 我想添加更多的弱密码模式规则该修改哪里A: 主要修改check_patterns函数。你可以添加更多的re.search检查。例如想检查是否包含常见英文单词# 在check_patterns函数内添加 common_words [‘password’, ‘admin’, ‘wifi’, ‘hello’, ‘love’] for word in common_words: if word in password.lower(): patterns_detected.append(f”包含常见单词 ‘{word}’”) break6.2 路由器设置相关Q4: 修改WiFi密码后有些智能家居设备连不上了A: 这是最常见的问题。你需要逐一重新配置这些设备连接到新的WiFi网络。通常需要找到设备的配网按钮或通过手机App进行操作。建议在修改主网络密码前先为IoT设备准备好一个独立的、稳定的专用网络如IoT专用SSID以后修改主密码就不会影响它们。Q5: 隐藏SSID后自己的设备怎么连接A: 在设备的WiFi设置中选择“添加其他网络”或“手动连接网络”然后准确输入你设置的SSID名称区分大小写、安全类型WPA2/WPA3和密码。第一次连接需要手动操作成功后设备通常会记住网络。Q6: 忘记了路由器的管理后台地址或密码怎么办A: 管理地址通常是192.168.1.1或192.168.0.1可以查看路由器底部的标签。如果密码也忘记了大多数路由器背面有一个Reset小孔用卡针长按约10秒可将路由器恢复出厂设置。注意这会清空所有自定义设置包括WiFi名称和密码你需要重新配置整个路由器。6.3 安全理念进阶Q7: 我的密码得了高分就绝对安全了吗A:没有绝对的安全。高分只意味着能抵御自动化的暴力破解和字典攻击。如果攻击者针对你个人进行“定向攻击”利用你的个人信息组合尝试或者你的设备中了木马被窃取了密码再强的密码也无济于事。因此密码安全是整体安全的一环还需结合系统安全安装杀毒软件、及时更新、警惕社会工程学诈骗等。Q8: 需要每隔多久换一次密码A: 对于家庭WiFi如果没有安全事件发生并不需要频繁更换。一个足够长的、复杂的密码可以长期使用。频繁更换反而可能导致你使用更简单的密码或忘记密码。更好的习惯是设置一个极强的密码然后忘记它用密码管理器保存并确保路由器其他安全设置到位。定期如每年一次用我们的脚本复查一下密码强度即可。这个Python脚本就像一把尺子能量化你家WiFi大门密码的牢固程度。但真正的安全来自于使用这把尺子测量后采取行动去加固大门并检查围墙路由器设置、管理访客网络隔离的整体安防意识。从今天起花十分钟运行一下脚本按照指南调整设置让你家的网络环境远离那些不请自来的“数字访客”。