LibreWatermark 是一个纯前端、开源的文本盲水印工具,基于零宽字符,无需后端,支持本地和静态网站部署。它让你可以在文本中嵌入隐形水印,追踪抄袭和内容传播。
- 纯前端实现:所有水印嵌入与提取均在浏览器本地完成,无需上传文本,保护隐私。
- 密钥保护与认证码:水印嵌入和提取均需密钥,认证码机制防止伪造和误提取。
- 分块嵌入,鲁棒性强:支持分块多点嵌入,部分复制粘贴后仍有较高提取概率。
- 高兼容性:无需依赖后端或第三方库,适合部署到任何静态网站(如 Cloudflare Pages、Vercel、GitHub Pages)。
- UTF-8 支持:水印内容支持任意语言和符号。
- 开源透明:算法与实现完全开源,便于安全审计和二次开发。
特性 | LibreWatermark | 传统零宽水印 | 语义/句法水印 | 图片/二维码水印 |
---|---|---|---|---|
纯前端/隐私保护 | ✔️ | 部分 | ❌ | ❌ |
密钥认证与防伪 | ✔️ | ❌ | 部分 | 部分 |
分块鲁棒性 | ✔️ | ❌ | 部分 | ❌ |
抗洗稿 | ❌ | ❌ | 部分 | ❌ |
易用性/部署 | ✔️ | ✔️ | ❌ | ❌ |
兼容性(文本平台) | 部分 | 部分 | ✔️ | ❌ |
在内容创作领域,抄袭与剽窃屡见不鲜。许多原创作者的劳动成果被无授权转载、洗稿甚至冒名顶替。盲水印技术为原创者提供了一种低成本、隐蔽的内容追踪手段,尤其适合于:
- 公众号、知乎、博客等平台的原创内容保护
- 合同、协议等敏感文本的防篡改与溯源
- 教育、科研资料的版权标记
可取之处:
- 易用、无需后端、隐私友好,适合个人和小团队。
- 分块嵌入提升了部分复制场景下的提取概率。
- 密钥认证机制大幅降低误判和伪造风险。
难点与局限:
- 零宽字符可能被部分平台或编辑器自动清除,导致水印失效。
- 对抗“洗稿”能力有限,语义重写后难以追踪。
- 需要用户妥善保存密钥,否则无法提取水印。
- 过高密度会导致文本体积膨胀,影响可读性和兼容性。
需求与推广:
- 随着内容创作门槛降低,原创保护需求日益增长,尤其是自媒体、教育、法律等领域。
- 推广难点在于用户认知、平台兼容性,以及对抗高级抄袭手段的技术瓶颈。
- 盲水印应作为版权保护的辅助工具,与法律、平台举报等手段结合使用。
- 本地使用:下载项目后,直接用浏览器打开
index.html
即可。 - 在线部署:支持快速部署到 Github Pages/Cloudflare Pages/Vercel/Netify 平台等
- 输入密钥(建议复杂且妥善保存)。
- 输入水印内容(如作者名、联系方式、唯一标识等)。
- 输入原始文本。
- 调整分块大小(越小嵌入越密集,鲁棒性越高,但文本体积增大)。
- 点击“生成带水印的文本”,复制结果。
- 输入嵌入时使用的密钥。
- 粘贴可能包含水印的文本。
- 点击“尝试提取水印”,若密钥正确且水印未被破坏,将显示水印内容。
- 利用零宽字符(
\u200b
、\u200c
)编码二进制数据。 - 水印数据结构:16位长度前缀 + 水印内容 + 16位密钥认证码。
- 密钥派生伪随机序列用于加密和定位嵌入位置。
- 分块嵌入,提升部分复制下的提取概率。
- 提取时全局扫描零宽字符,逐位尝试解码并校验认证码。
- 零宽字符可能被部分平台或编辑器过滤,建议先测试目标平台兼容性。
- 重要提示: 如果将带盲水印的文本用于网页、URL、代码块等场景,可能导致链接无法跳转、代码无法运行或渲染异常。请务必在此类场景下先通过“清除零宽字符”功能移除水印!
- 本工具不适用于对抗语义级“洗稿”。
- 请妥善保存密钥,遗失后无法提取水印。
- 仅供学习与研究,严禁用于非法用途。
盲水印是一种隐蔽、低成本的原创内容取证手段,适合用于证明“直接复制粘贴”或“轻微修改后复制”的抄袭行为。实际维权时,建议结合多种证据渠道:
-
盲水印提取与截图
- 使用本工具输入涉嫌抄袭的文本和你的密钥,提取出水印内容,并截图保存提取过程(包括输入文本、密钥、提取结果)。
- 截图应包含时间、页面完整信息,便于后续举证。
-
网页快照/存证
- 利用第三方网页快照服务(如互联网档案馆、谷歌快照、百度快照等)保存被抄袭页面的快照,防止对方删除或篡改内容。如果对方的托管代码是公开的,也可以在提交记录中找到包含盲水印内容。
- 可用平台自带的“举报”或“侵权投诉”功能上传快照或存证材料。
-
平台原始数据/发布时间
- 平台的原始发布时间、编辑记录等可作为辅助证据,但需注意:自托管博客等平台的发布时间可以被站长随意修改,法律效力有限。
- 建议优先使用第三方平台(如知乎、微信公众号、知网等)自动记录的发布时间。
-
其他辅助证据
- 电子邮件、聊天记录、创作过程文档等均可作为原创证明。
- 若有注册版权、区块链存证等,也可一并提交。
-
联合取证与投诉建议
- 多渠道、多证据联合使用,能显著提升投诉成功率。
- 向平台投诉时,建议同时提交:
- 盲水印提取截图
- 被抄袭页面快照
- 原创内容的发布时间/存证
- 其他辅助材料
注意:
- 盲水印仅能证明“内容曾经属于你”,但无法防止“洗稿”或深度改写后的抄袭。
- 任何单一证据都有局限性,建议多种方式联合取证。
- 取证材料请及时保存,防止对方删除或修改内容。
本项目 LibreWatermark 与一些类似的文本盲水印项目(例如数年前 guofei 大佬提供了两个传统零宽字符水印的 Python 项目)在设计原理和功能特性上有所不同。以下是一个简要对比表格,帮助理解本项目的优势所在:
特性 | LibreWatermark (JS) | 方案一 | 方案二 |
---|---|---|---|
实现语言 | JavaScript (纯前端) | Python | Python |
部署方式 | 静态托管友好 (Cloudflare Pages, Vercel, GitHub Pages) | 后端脚本/服务 | 后端脚本/服务 |
核心嵌入策略 | 分块嵌入: 将文本分块,在每个块内独立嵌入完整的水印信息。 | 顺序插入: 遍历文本,根据水印比特决定是否在当前字符后插入。 | 单点插入: 将完整水印作为一个整体插入到文本的某个位置。 |
水印比特表示 | '\u200B' ('0') 和 '\u200C' ('1') (使用两种零宽字符) | '\u200C' ('1'),文本本身代表 ('0') (仅使用一种零宽字符) | 使用两种自定义零宽字符 (如 '\u200B', '\u200C' 或其他) |
密钥用途 (嵌入) | 强依赖: 播种多个 PRNG,影响 Keystream、嵌入位置、认证码 生成。 | 弱依赖: 仅用于播种全局 random (在实际嵌入代码中未影响核心逻辑)。 | 中度依赖: 播种 random,用于水印数据的 XOR 混淆。 |
密钥用途 (提取) | 必需且强验证: 用于生成 Keystream 和重新计算/验证认证码,确保密钥和数据完整性匹配。 | 不使用: 任何人都可以提取,无密钥保护。 | 必需: 用于对提取到的二进制数据进行 XOR 解密。 |
认证/验证机制 | 有且强: 使用独立的、依赖密钥和数据的 32 位认证码,严格校验提取结果。 | 无: 仅依赖提取过程本身。 | 无独立认证码,仅依赖 XOR 解密是否产生“看起来”像有效文本的数据 (弱)。 |
鲁棒性 (部分复制) | 高: 得益于水印信息在多个块中重复嵌入,复制部分文本也可能包含完整水印块。 | 很低: 高度依赖提取到完整的、按顺序的嵌入序列。 | 低: 仅当复制内容恰好包含完整的单点水印块时才能提取。 |
鲁棒性 (文本修改) | 较低 (零宽字符固有局限性); 多块嵌入略有帮助。 | 很低: 任何顺序或字符的改动极易破坏水印结构。 | 低 (零宽字符固有局限性); 单点嵌入容易被移除或破坏。 |
原始零宽字符处理 | 有: 嵌入前检测原始文本中的零宽字符,并提供清除选项。 | 无显式处理。 | 无显式处理 (但提供了移除水印的功能)。 |
- 安全性核心: 与示例 Python 方案一完全不同,LibreWatermark 的设计核心是密钥保护和数据完整性验证。通过基于密钥的 Keystream 和强认证码机制,确保只有掌握正确密钥的人才能解密并验证提取到的水印,这为追溯提供了更可靠的证据。
- 分块嵌入的实用性: 针对用户提出的“复制一小段即可提取”的需求,分块嵌入策略是 Python 方案一和二都未能有效解决的核心痛点。LibreWatermark 通过在文本的多个位置重复嵌入完整水印信息,显著提高了从任意文本片段中成功提取水印的概率,更符合实际使用场景。
- 纯前端的便捷性: 无需后端支持,整个项目可以在用户的浏览器中运行,并能极其方便地部署到 Cloudflare Pages、Vercel 等静态托管平台,大大降低了部署和维护成本。
- 鲁棒性提升: 虽然零宽字符水印本身对文本修改敏感,但 LibreWatermark 的多块重复嵌入增加了水印冗余,即使部分区域受损,仍有可能从其他未被破坏的区域成功提取。
- 友好的交互: 添加了字符计数、密度滑块控制等 UI 元素,以及处理原始文本中零宽字符的提示和清除功能,提高了用户体验和工具的健壮性。