当前位置: 首页 > news >正文

python开发--文件敏感信息识别

0x00 背景

文档中敏感信息识别。不限于word, pdf 等文件格式中的敏感信息及其中的图片敏感信息识别。

0x01 识别原理

以word文档为例

.docx文件有很多种结构,这些结构在python-docx中用3种不同的类型来表示:最高一层是Document对象表示文档,每个Document对象包含一个Paragraph 对象也就是段落组成的列表,而每个Paragraph对象则包含一个Run对象的列表

一个Run对象是具有相同格式的文本,当发生变化的时候就需要一个新的Run对象

个人觉得读取全部文档信息,然后用正则匹配效率比较高。

word 或 pdf 里面有图片的情况,涉及到数字图像处理技术。(图片里的敏感信息)

0x02 实现

用到一个库 python-docx

#!pip install python-docx - -userimport docx
import osprint(os.getcwd())
file = docx.Document("test.docx")
''' # test.docx  #经测试,还得是个docx文档,doc不行
Test数据匹配数据TestTest 敏感信息
'''
print("打印文件行数:" + str(len(file.paragraphs)))
print("打印第1行: " + file.paragraphs[0].text)
print("打印第1行长度: " + str(len(file.paragraphs[0].runs)))
print("打印第3行长度: " + str(len(file.paragraphs[2].runs)))
print("打印第5行长度: " + str(len(file.paragraphs[4].runs)))
print("打印第7行长度: " + str(len(file.paragraphs[6].runs)))  # 空格注意for i in range(2):print(file.paragraphs[0].runs[i].text)  # 只有len 2print("----------")for i in range(3):print(file.paragraphs[6].runs[i].text)  # 只有len 3/4print("----------")# 看样子是根据大小写等样式来区分段落的def getText(fileName):doc = docx.Document(fileName)TextList = []for paragraph in doc.paragraphs:TextList.append(paragraph.text)return '\n'.join(TextList)fileName = r'test.docx'
print(getText(fileName))

test.docx 内容如下:

Test数据匹配数据TestTest 敏感信息

我在不同的电脑打印每一行长度有些不同,不清楚是否跟word版本以及word

版本内置的字体有关。而且只支持docx,暂不支持doc。

打印结果如下:

打印文件行数:7
打印第1行: Test 数据
打印第1行长度: 2
打印第3行长度: 1
打印第5行长度: 1
打印第7行长度: 3
Test 
数据
----------
T
est 
敏感信息
----------
Test数据匹配数据TestTest 敏感信息

而在专业版word上执行结果是 :

打印第1行长度: 2
打印第3行长度: 1
打印第5行长度: 2
打印第7行长度: 4

细节问题暂没时间深究,猜测和系统默认字体有关,理由是在pycharm打开docx文档默认字体不同,一个是英文字体,一个是等线字体。

0x03 reference

【数据安全】一文读懂数据内容识别核心技术 – 绿盟科技技术博客

了解基于确切数据匹配的敏感信息类型 | Microsoft Learn   -- 微软EDM敏感信息识别

python使用docx模块读写docx文件的方法与docx模块常用方法_docx.document_癫疯时刻的博客-CSDN博客

用Python读写Word文档入门-腾讯云开发者社区-腾讯云

python解析并读取PDF文件:函数总结_pypdf读取章节内容_满腹的小不甘的博客-CSDN博客

0x04 后记

python 识别pdf 中敏感信息见 reference 里的链接。python 识别pdf 推荐 pdfminer3k 或 pdfplumber 两个库。

由于时间关系本文写的略简洁,,敏感图片识别也没有介绍到,后续如果有时间会继续修改完善本文。

http://www.lryc.cn/news/141289.html

相关文章:

  • 【力扣】746. 使用最小花费爬楼梯 <动态规划>
  • sftp命令 添加端口(亲测)
  • Redis.conf详解
  • 【论文笔记】Planning and Decision-Making for Autonomous Vehicles
  • 视频云存储/安防监控EasyCVR视频汇聚平台接入GB国标设备时,无法显示通道信息该如何解决?
  • git中,add到暂存区,commit且push之后,暂存区域里还有内容吗
  • java中用SXSSFWorkbook把多个字段的list数据和单个实体dto导出到excel如何导出到多个sheet页详细实例?
  • ES基础操作
  • PCIE超高速实时运动控制卡在六面外观视觉检测上的应用
  • ctfshow web入门 php特性 web108-web112
  • 数据可视化是什么?有什么工具?
  • PC端版面设计之尾部设计
  • neo4jd3拓扑节点显示为节点标签(自定义节点显示)
  • 网络安全(黑客)了解学习路线
  • 【CSS】CSS 特性 ( CSS 优先级 | 优先级引入 | 选择器基本权重 )
  • Linux Shell 搜索命令 grep
  • 【C进阶】指针(一)
  • bug复刻,解决方案---在改变div层级关系时,导致传参失败
  • 2023年Java核心技术面试第九篇(篇篇万字精讲)
  • 解码Python JSON:从基础到高级,掌握使用的精髓
  • Qt --- 自定义工具类 持续更新... ...
  • GO语言圣经 第二章习题
  • Java 语言实现线性查找算法
  • xcode15 change
  • MySQL集群(mysql-cluster)
  • 基于神经网络的3D地质模型
  • Spring AOP教程_编程入门自学教程_菜鸟教程-免费教程分享
  • 1.linux的常用命令
  • XiaoFeng.Net 网络库使用
  • 【ES6】—数组的扩展