看见一个文本水印项目: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