用python写的文本水印隐藏工具

看见一个文本水印项目:text_blind_watermark

https://github.com/guofei9987/text_blind_watermark

假设这种场景是不是合适使用:

小米su7发布之前一周,各大博主已经已经拿到参数配置和价格表了,保密政策不允许博主提前发布,但是万一有头铁的提前发布了,就可以用这个工具揪出内鬼。

1、小米计划给A,B,C,D四位博主发信息,信息如下:

复制代码
XXX产品就是好,XXX产品呱呱叫。用上XXX产品,走上人生巅峰不是梦。XXX产品详细参数如下:
能源类型 纯电动
外观颜色 ● 海湾蓝、雅灰、橄榄绿    
○ 珍珠白、钻石黑、流星蓝、霞光紫、熔岩橙、寒武岩灰
内饰颜色 ● 银河灰、曜石黑、暮光红、迷雾紫
基本参数
车长 × 车宽 × 车高(mm) 4997 × 1963 × 1455 4997 × 1963 × 1440
轴距(mm) 3000
最小转弯半径(m) 5.7
前备箱容积(L) 105
后备厢容积(L) 517 493
风阻系数 0.195
整车性能
0-100km/h加速时间(s) 5.28 5.7 2.78



此条信息只能XX日晚上8点之后发!各位一定要保密,不到时候不准发送,如果提前泄露,我们将会追责。请各位一定要注意!切记切记!

2、发之前,给A、B、C、D四个人的消息分别加上密文。

2.1 给A的:

密文是博主A,密码是123

python 复制代码
from text_blind_watermark import TextBlindWatermark

watermark = "博主A" #这就是打入的密文
password = "123"#为了防止谁都能解密,就设置一个密码。A的密码是123

text = """
XXX产品就是好,XXX产品呱呱叫。用上XXX产品,走上人生巅峰不是梦。XXX产品详细参数如下:
能源类型 纯电动
外观颜色 ● 海湾蓝、雅灰、橄榄绿    
○ 珍珠白、钻石黑、流星蓝、霞光紫、熔岩橙、寒武岩灰
内饰颜色 ● 银河灰、曜石黑、暮光红、迷雾紫
基本参数
车长 × 车宽 × 车高(mm) 4997 × 1963 × 1455 4997 × 1963 × 1440
轴距(mm) 3000
最小转弯半径(m) 5.7
前备箱容积(L) 105
后备厢容积(L) 517 493
风阻系数 0.195
整车性能
0-100km/h加速时间(s) 5.28 5.7 2.78



此条信息只能XX日晚上8点之后发!各位一定要保密,不到时候不准发送,如果提前泄露,我们将会追责。请各位一定要注意!切记切记!
"""

twm = TextBlindWatermark(password=password)
twm.read_wm(watermark=watermark)
twm.read_text(text=text)
text_embed = twm.embed()
print('加密完成,内容已写入文件text_embed.txt')
with open('text_embed.txt', 'w', encoding='utf-8') as f:
    f.write(text_embed)

2.2 给B的:

密文是博主B,密码是1234

python 复制代码
```python
from text_blind_watermark import TextBlindWatermark

watermark = "博主B" #这就是打入的密文
password = "1234"#为了防止谁都能解密,就设置一个密码。A的密码是123

text = """
XXX产品就是好,XXX产品呱呱叫。用上XXX产品,走上人生巅峰不是梦。XXX产品详细参数如下:
能源类型 纯电动
外观颜色 ● 海湾蓝、雅灰、橄榄绿    
○ 珍珠白、钻石黑、流星蓝、霞光紫、熔岩橙、寒武岩灰
内饰颜色 ● 银河灰、曜石黑、暮光红、迷雾紫
基本参数
车长 × 车宽 × 车高(mm) 4997 × 1963 × 1455 4997 × 1963 × 1440
轴距(mm) 3000
最小转弯半径(m) 5.7
前备箱容积(L) 105
后备厢容积(L) 517 493
风阻系数 0.195
整车性能
0-100km/h加速时间(s) 5.28 5.7 2.78



此条信息只能XX日晚上8点之后发!各位一定要保密,不到时候不准发送,如果提前泄露,我们将会追责。请各位一定要注意!切记切记!
"""

twm = TextBlindWatermark(password=password)
twm.read_wm(watermark=watermark)
twm.read_text(text=text)
text_embed = twm.embed()
print('加密完成,内容已写入文件text_embed.txt')
with open('text_embed.txt', 'w', encoding='utf-8') as f:
    f.write(text_embed)

2.3 给C的:

密文是博主C,密码是12345

代码跟之前一样,改密文和密码参数即可

2.4 给D的:

密文是博主D,密码是123456

代码跟之前一样,改密文和密码参数即可

3、得出密文文件,将文件发给ABCD四个博主

4、如果出现泄密情况,将网络上泄密的文字复制到文件里,然后将文件一个一个匹配博主的密码进行解密

4.1、解密:

遍历所有博主,将加密的文字循环调用解密方法,最终得出是这段密文是谁的。

python 复制代码
from text_blind_watermark import TextBlindWatermark

dic = {'博主A':'123','博主B':'1234','博主C':'12345','博主D':'123456'}


with open('text_embed.txt', 'r', encoding='utf-8') as f:
    txt_new = f.read()

# 循环从dic里提取密码,并且代入到TextBlindWatermark中,遇见异常捕获之后直接跳过,最终得到盲水印
for key, value in dic.items():
    try:
        twm = TextBlindWatermark(password=value)
        wm_extract = twm.extract(txt_new)
        print("解密出的水印:")
        print(wm_extract)
        break
    except:
        continue
    

最终得出B博主泄密

PS,控制台打印输出的加密后文字,直接复制出来是解密不了的,所以写文件里了。

END

相关推荐
郝学胜-神的一滴17 分钟前
Effective Python 第44条:用纯属性与修饰器取代旧式的 setter 与 getter 方法
开发语言·python·程序人生·软件工程
嫂子的姐夫1 小时前
11-py调用js
javascript·爬虫·python·网络爬虫·爬山算法
程序员莫小特2 小时前
老题新解|计算2的N次方
开发语言·数据结构·算法·青少年编程·信息学奥赛一本通
图亚Vanta2 小时前
Python入门第一课:Python安装、VSCode/Pycharm配置
vscode·python·pycharm
睿思达DBA_WGX2 小时前
使用 python-docx 库操作 word 文档(2):在word文档中插入各种内容
python·word
white-persist3 小时前
XXE 注入漏洞全解析:从原理到实战
开发语言·前端·网络·安全·web安全·网络安全·信息可视化
kunge1v53 小时前
学习爬虫第五天:自动化爬虫
爬虫·python·自动化
人生导师yxc3 小时前
Java中Mock的写法
java·开发语言
m***记3 小时前
Python 自动化办公的 10 大脚本
windows·python·自动化
半路程序员3 小时前
Go语言学习(四)
开发语言·学习·golang