找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 63|回复: 0

[Windows] 政企级敏感信息清理神器!支持 Office/PDF/ 多格式文件批量扫描

[复制链接]

47

主题

5

回帖

525

积分

小学生

积分
525
UID
6
精华
0
威望
23
阁豆
420
注册时间
2026-1-13
发表于 2026-1-13 19:24:12 | 显示全部楼层 |阅读模式
一、开发初衷核心使命
政企级敏感信息清理神器的开发,旨在为政府部门、企事业单位以及所有涉及个人信息处理的工作场景,提供一套高效、可靠的解决方案,帮助用户全面清理和管理电脑中的个人敏感信息,从根源上防范信息泄露风险,切实保障公民个人信息安全。
背景与需求
在数字化转型加速的今天,政府部门和企事业单位的日常办公中积累了大量包含公民个人敏感信息的电子文件。这些信息涵盖身份证号、手机号、银行卡号、邮箱地址等核心隐私数据,一旦因误操作、设备丢失或网络攻击导致泄露,将给公民带来不可估量的隐私侵犯和财产损失,同时也会使相关单位面临严峻的法律责任和声誉危机。
传统的手动清理方式存在诸多弊端:
  • 效率低下:面对海量文件,手动筛查耗时费力
  • 容易遗漏:人工检查难以保证100%的准确率
  • 缺乏标准化:清理流程不统一,效果参差不齐
  • 无法追溯:清理记录不完整,难以进行审计
因此,我们开发了这款敏感文件扫描工具2.0,通过自动化、智能化的技术手段,解决上述痛点,为用户提供全方位的敏感信息保护。
设计理念
  • 全面覆盖:支持15种敏感信息类型和多种文件格式的检测
  • 高效扫描:采用多线程技术,大幅提升扫描速度
  • 直观易用:简洁友好的图形界面,降低使用门槛
  • 安全可靠:内置加密解密功能,保障敏感信息全生命周期安全
  • 灵活扩展:支持自定义正则表达式,满足个性化检测需求
  • 可追溯性:完整的扫描历史记录,便于审计和管理
二、项目架构与核心功能项目结构
  1. 敏感文件扫描工具2.0/
  2. ├── config/              # 配置管理模块
  3. ├── core/                # 核心功能模块
  4. ├── ui/                  # 界面模块
  5. ├── utils/               # 工具模块
  6. ├── main.py              # 主程序入口
  7. ├── README.md            # 项目说明文档
  8. ├── requirements.txt     # 依赖包列表
  9. ├── build_exe.spec       # 64位打包配置文件
  10. ├── build_exe_32bit.spec  # 32位打包配置文件
  11. ├── 打包说明.md           # 打包详细说明
  12. └── 快速打包指南.md        # 打包简化指南
复制代码

核心模块解析1. 配置管理模块(config/)
  • config_manager.py:负责配置的加载、保存和管理
  • default_config.py:定义默认配置参数
  • 支持用户自定义配置,包括扫描参数、历史记录设置、日志设置等
2. 核心功能模块(core/)扫描核心(scanner.py)
  • ScanWorker类:多线程扫描任务执行器,提高扫描效率
  • Scanner类:扫描任务管理器,负责任务的创建、启动、停止和结果处理
  • 支持单个文件、目录以及多路径(多盘符)扫描
  • 实时更新扫描进度和结果,提供直观的用户反馈
文件处理(file_processor.py)
  • 支持多种文件格式的读取和解析:
    • 文本文件:txt, md, csv, log, json, xml, html等
    • Office文档:docx, xlsx, pptx
    • PDF文档
  • 自动检测文件编码,确保内容读取的准确性
  • 提供文件格式支持检测功能
敏感信息检测(regex_patterns.py)
  • 内置15种敏感信息检测规则
    • 身份证号(标准格式和简化格式)
    • 手机号
    • 邮箱地址
    • 银行卡号
    • IP地址
    • MAC地址
    • URL地址
    • QQ号
    • 微信号
    • 密码
    • 密钥
    • 日期
    • 时间
    • 金额
  • 支持自定义正则表达式规则的添加、编辑和删除
  • 支持启用/禁用特定检测规则
3. 界面模块(ui/)
  • main_window.py:主窗口,提供扫描路径选择、扫描控制和结果展示
  • config_dialog.py:配置对话框,用于设置扫描参数和正则表达式规则
  • history_dialog.py:历史记录对话框,用于查看和管理扫描历史
  • file_management_window.py:文件管理窗口,用于处理扫描到的敏感文件
  • crypto_tool_window.py:加密解密工具窗口,支持文件加密解密
  • encryption_window.pydecryption_window.py:加密解密功能的具体实现
4. 工具模块(utils/)
  • encryption.py:提供文件加密解密功能
  • compression.py:提供文件压缩功能,支持压缩密码设置
技术栈
  • 开发语言:Python 3.6+
  • GUI框架:PyQt5
  • 文档处理:python-docx, openpyxl, python-pptx, PyPDF2
  • 编码检测:chardet
  • 打包工具:PyInstaller
三、功能特性1. 全面的文件格式支持
  • 文本文件:txt, md, csv, log, json, xml, html等
  • Office文档:docx, xlsx, pptx
  • PDF文档
2. 丰富的敏感信息检测
  • 内置15种常用敏感信息检测规则
  • 支持自定义正则表达式规则
  • 支持规则的启用/禁用管理
3. 高效的扫描机制
  • 多线程扫描技术,大幅提升扫描速度
  • 支持单个文件、目录和多盘符扫描
  • 实时显示扫描进度、速度和剩余时间
4. 直观的结果展示
  • 树形视图展示扫描结果,层次分明
  • 详细信息面板显示敏感信息的具体位置和内容
  • 支持按文件类型、敏感信息类型筛选结果
5. 完善的文件管理功能
  • 支持批量删除敏感文件
  • 支持移动文件到指定目录
  • 支持复制文件路径
  • 支持文件压缩(可选压缩密码)
6. 安全的加密解密功能
  • 支持对敏感文件进行加密保护
  • 支持加密文件的解密操作
  • 标签页式界面,操作便捷
7. 完整的扫描历史记录
  • 保存完整的扫描记录
  • 支持查看、删除和导出历史记录
  • 便于审计和追溯
8. 灵活的配置选项
  • 支持自定义扫描参数
  • 支持调整历史记录设置
  • 支持配置日志级别和保存位置
  • 支持调整文件管理器窗口大小
四、使用指南安装方式安装与运行
  • 从源码运行
    • 确保已安装Python 3.6或更高版本
    • 克隆或下载项目源码
    • 安装项目依赖:
    1. pip install -r requirements.txt
    复制代码
    运行主程序:
    1. python main.py
    复制代码

  • 打包生成可执行文件(可选):
    • 安装打包工具:pip install pyinstaller
    • 使用64位Python打包64位版本:pyinstaller build_exe.spec
    • 使用32位Python打包32位版本:pyinstaller build_exe_32bit.spec
    • 生成的可执行文件将位于dist目录下
    • 详细打包步骤可参考项目中的打包说明.md和快速打包指南.md

基本使用流程
  • 启动程序:从源码运行python main.py,或使用自行打包生成的可执行文件
  • 选择扫描范围
    • 在"扫描路径"输入框中选择要扫描的目录
    • 或勾选"扫描全部磁盘"对当前系统所有可用磁盘进行扫描
  • 设置扫描选项
    • 勾选"包含内部文件夹"以扫描子目录
    • 根据需要调整其他扫描参数
  • 开始扫描:点击"开始扫描"按钮
  • 查看扫描结果
    • 扫描结果将实时显示在左侧树形视图中
    • 点击结果项可在右侧面板查看详细信息
    • 底部状态栏显示扫描进度、速度和剩余时间
  • 处理敏感文件
    • 扫描完成后,点击"打开文件管理器"按钮
    • 在文件管理器中可进行删除、移动、复制路径等操作

高级功能使用1. 自定义扫描规则
  • 点击菜单栏中的"工具" → "配置管理"
  • 切换到"正则表达式"标签页
  • 在"自定义正则表达式"区域输入模式名称和正则表达式
  • 点击"添加规则"按钮保存自定义规则
  • 可随时编辑或删除已有的自定义规则
  • 可通过勾选/取消勾选来启用/禁用特定规则
2. 管理扫描历史
  • 点击菜单栏中的"文件" → "扫描历史"
  • 在历史记录对话框中可查看、删除或导出历史记录
  • 支持按时间顺序浏览历史扫描结果
  • 可查看每次扫描的详细信息,包括扫描路径、耗时、结果数量等
3. 敏感文件加密解密
  • 点击菜单栏中的"工具" → "加密解密工具"
  • 加密操作
    • 在"加密工具"标签页点击"添加文件"或"添加文件夹"按钮
    • 选择要加密的文件或文件夹
    • 设置加密密钥和输出目录
    • 点击"开始加密"按钮
  • 解密操作
    • 在"解密工具"标签页点击"添加文件"或"添加文件夹"按钮
    • 选择要解密的.enc文件或文件夹
    • 设置正确的解密密钥和输出目录
    • 点击"开始解密"按钮

4. 优化配置参数
  • 点击菜单栏中的"工具" → "配置管理"
  • 根据实际需求调整各项配置:
    • 扫描设置:默认扫描路径、是否包含子目录、最大文件大小等
    • 历史记录设置:历史记录文件名、最大记录数量等
    • 日志设置:日志文件名、日志级别、最大日志大小等
    • 文件管理器设置:默认打开文件管理器、窗口宽度、窗口高度等

打包指南
如果需要自行打包生成可执行文件,可参考项目中的打包相关文档:
  • 打包说明.md:详细的打包步骤和配置说明
  • 快速打包指南.md:简化的打包流程
  • 直接打包32位.bat:一键打包32位可执行文件的脚本
五、适用场景
  • 政府部门:清理办公电脑中的公民个人信息,防范信息泄露
  • 企事业单位:处理客户数据,保障商业机密和客户隐私安全
  • 信息安全审计:对电脑中的敏感信息进行全面检测和评估
  • 数据迁移前处理:在设备交接或数据迁移前清理敏感信息
  • 旧设备处理:在设备报废或转让前彻底清理敏感信息
  • 个人用户:清理旧电脑中的个人隐私信息,保障个人安全
  • 合规检查:协助组织满足数据保护法规的要求
六、技术亮点
  • 多线程扫描:采用PyQt5的QThread实现多线程扫描,提高扫描效率
  • 正则表达式优化:精心设计的正则表达式规则,提高检测准确率
  • 模块化设计:清晰的模块划分,便于维护和扩展
  • 友好的用户界面:基于PyQt5开发的现代化图形界面,操作便捷
  • 完整的文档支持:提供详细的使用说明和技术文档
  • 跨版本兼容:支持32位和64位Windows系统
七、版本信息
  • 当前版本:2.0
  • 发布日期:2025-12-02
  • 支持系统:Windows(32位和64位)
  • 开发语言:Python 3.6+
  • 开发状态:持续更新中
640 (1).png
640 (2).png
640 (3).png
640.png
核心代码:
main.py
[Python]
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. 敏感文件扫描工具2.0主程序入口
  5. """

  6. import sys
  7. import os

  8. # 添加项目根目录到Python路径
  9. sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

  10. from PyQt5.QtWidgets import QApplication
  11. from PyQt5.QtGui import QIcon

  12. from ui.main_window import MainWindow


  13. def main():
  14.     """
  15.     主函数
  16.     """
  17.     # 创建应用程序实例
  18.     app = QApplication(sys.argv)
  19.      
  20.     # 设置应用程序图标
  21.     # app.setWindowIcon(QIcon('icon.png'))
  22.      
  23.     # 创建主窗口
  24.     main_window = MainWindow()
  25.      
  26.     # 显示主窗口
  27.     main_window.show()
  28.      
  29.     # 启动事件循环
  30.     sys.exit(app.exec_())


  31. if __name__ == '__main__':
  32.     main()
复制代码

核心扫描代码:scaner.py
[Python]
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. 敏感文件扫描核心模块
  5. """

  6. import os
  7. import re
  8. import time
  9. import json
  10. from typing import List, Dict, Callable, Optional
  11. from pathlib import Path

  12. from PyQt5.QtCore import QThread, pyqtSignal

  13. from config.config_manager import ConfigManager
  14. from core.regex_patterns import RegexPatterns
  15. from core.file_processor import FileProcessor


  16. class ScanWorker(QThread):
  17.     """
  18.     扫描工作线程类
  19.     """
  20.     # 定义信号
  21.     results_updated = pyqtSignal(list)
  22.     progress_updated = pyqtSignal(int, float, float)
  23.     scan_completed = pyqtSignal(dict)
  24.      
  25.     def __init__(self, path: str, recursive: bool = True):
  26.         """
  27.         初始化扫描工作线程
  28.          
  29.         Args:
  30.             path: 扫描路径
  31.             recursive: 是否包含内部文件夹
  32.         """
  33.         super().__init__()
  34.         self.path = path
  35.         self.recursive = recursive
  36.         self.is_scanning = False
  37.          
  38.         self.config_manager = ConfigManager()
  39.         self.regex_patterns = RegexPatterns()
  40.         self.file_processor = FileProcessor()
  41.          
  42.         self.scan_results = []
  43.         self.scan_start_time = 0
  44.         self.total_files = 0
  45.         self.scanned_files = 0
  46.      
  47.     def _scan_file(self, file_path: str) -> List[Dict]:
  48.         """
  49.         扫描单个文件
  50.          
  51.         Args:
  52.             file_path: 文件路径
  53.             
  54.         Returns:
  55.             敏感信息匹配结果列表
  56.         """
  57.         results = []
  58.         # 确保文件路径是绝对路径
  59.         abs_file_path = os.path.abspath(file_path)
  60.         file_ext = os.path.splitext(abs_file_path)[1].lower()
  61.          
  62.         try:
  63.             # 读取文件内容
  64.             content = self.file_processor.read_file(abs_file_path)
  65.             
  66.             if content:
  67.                 # 匹配所有正则表达式
  68.                 for pattern_name, pattern in self.regex_patterns.get_all_patterns().items():
  69.                     matches = pattern.findall(content)
  70.                     if matches:
  71.                         # 去重
  72.                         unique_matches = list(set(matches))
  73.                         results.append({
  74.                             'file_path': abs_file_path,
  75.                             'pattern_name': pattern_name,
  76.                             'matches': unique_matches,
  77.                             'match_count': len(unique_matches)
  78.                         })
  79.         except Exception as e:
  80.             pass
  81.          
  82.         return results
  83.      
  84.     def _scan_directory(self, directory: str, recursive: bool = True) -> List[Dict]:
  85.         """
  86.         扫描目录
  87.          
  88.         Args:
  89.             directory: 目录路径
  90.             recursive: 是否包含内部文件夹
  91.             
  92.         Returns:
  93.             敏感信息匹配结果列表
  94.         """
  95.         results = []
  96.         file_list = []
  97.          
  98.         # 确保目录路径是绝对路径
  99.         abs_directory = os.path.abspath(directory)
  100.          
  101.         # 获取所有文件
  102.         if recursive:
  103.             for root, _, files in os.walk(abs_directory):
  104.                 for file in files:
  105.                     # 拼接绝对路径
  106.                     file_path = os.path.join(root, file)
  107.                     file_list.append(file_path)
  108.         else:
  109.             for file in os.listdir(abs_directory):
  110.                 # 拼接绝对路径
  111.                 file_path = os.path.join(abs_directory, file)
  112.                 if os.path.isfile(file_path):
  113.                     file_list.append(file_path)
  114.          
  115.         self.total_files = len(file_list)
  116.         self.scanned_files = 0
  117.          
  118.         # 开始扫描
  119.         for file_path in file_list:
  120.             if not self.is_scanning:
  121.                 break
  122.             
  123.             file_results = self._scan_file(file_path)
  124.             if file_results:
  125.                 results.extend(file_results)
  126.                 # 发送结果更新信号
  127.                 self.results_updated.emit(file_results)
复制代码

下载链接:


游客,如果您要查看本帖隐藏内容请回复









您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|版权声明|侵权投诉|免责声明|捐助支持|免费流量卡|理想阁 ( 晋ICP备2026000046号-1 )

GMT+8, 2026-3-3 20:00 , Processed in 0.091729 second(s), 23 queries .

Powered by 理想阁 社区

© 2001-2026 理想阁论坛社区.

快速回复 返回顶部 返回列表