用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

相关推荐
databook2 小时前
探索视觉的边界:用 Manim 重现有趣的知觉错觉
python·动效
明月_清风3 小时前
Python 性能微观世界:列表推导式 vs for 循环
后端·python
明月_清风3 小时前
Python 性能翻身仗:从 O(n) 到 O(1) 的工程实践
后端·python
helloweilei19 小时前
python 抽象基类
python
用户83562907805119 小时前
Python 实现 PPT 转 HTML
后端·python
zone77391 天前
004:RAG 入门-LangChain读取PDF
后端·python·面试
zone77391 天前
005:RAG 入门-LangChain读取表格数据
后端·python·agent
树獭非懒2 天前
AI大模型小白手册|Embedding 与向量数据库
后端·python·llm
唐叔在学习2 天前
就算没有服务器,我照样能够同步数据
后端·python·程序员
曲幽2 天前
FastAPI流式输出实战与避坑指南:让AI像人一样“边想边说”
python·ai·fastapi·web·stream·chat·async·generator·ollama