用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

相关推荐
奋飞安全5 分钟前
初试js反混淆
开发语言·javascript·ecmascript
guoruijun_2012_45 分钟前
fastadmin多个表crud连表操作步骤
android·java·开发语言
浪里个浪的10248 分钟前
【C语言】计算3x3矩阵每行的最大值并存入第四列
c语言·开发语言·矩阵
@东辰15 分钟前
【golang-技巧】-自定义k8s-operator-by kubebuilder
开发语言·golang·kubernetes
小han的日常21 分钟前
pycharm分支提交操作
python·pycharm
乐悠小码21 分钟前
数据结构------队列(Java语言描述)
java·开发语言·数据结构·链表·队列
史努比.23 分钟前
Pod控制器
java·开发语言
敲敲敲-敲代码32 分钟前
游戏设计:推箱子【easyx图形界面/c语言】
c语言·开发语言·游戏
明月清风徐徐39 分钟前
Scrapy爬取豆瓣电影Top250排行榜
python·selenium·scrapy
theLuckyLong40 分钟前
SpringBoot后端解决跨域问题
spring boot·后端·python