零宽字符隐写
零宽字符隐写是把一段信息编码成看不见的零宽字符、插进正常文字里的方法,常用来做文本盲水印。本页把隐藏内容转成 U+200B 等零宽字符按段嵌入,文字外观和可见字数都不变;把文字粘回来就能提取水印,还能加口令、批量给不同接收人打不同标记,追查是哪一份流出。全程浏览器本地处理,文字不上传。
不加口令时,任何人用本页都能读出隐藏内容。
部分平台(如某些输入框、短信、PDF 导出)会过滤零宽字符,发出前请把结果粘回「提取」自测一次。
嵌入与提取全部在浏览器本地完成,载体文字、隐藏内容和口令不上传、不保存;页面只记住嵌入位置与字符集。
如何使用零宽字符隐写
在「嵌入水印」里粘贴载体文字(文章、通知、文案),在「隐藏内容」里写要藏的标记,比如「发给 张三 2026-09」;需要保密就勾选「用口令加密隐藏内容」。
点「生成」,复制带水印的文字发出去;可以先点「去提取验证」当场确认能读出来。要发给多人,勾选「为多人生成不同水印」,每行一个名字,一次生成多份。
需要追查时切到「提取水印」,粘贴流出的文字,页面立刻列出藏着的标记、出现次数和隐形字符统计;加密的水印输入口令即可解开。
关于零宽字符隐写的常见问题
- 零宽字符隐写会把我的文字上传到服务器吗?
- 不会。嵌入、提取和统计都是浏览器里的字符串运算,载体文字、隐藏内容和口令都不经过网络,也不保存到本地存储;页面只记住你选的嵌入位置和字符集。口令加密同样由浏览器内置的 Web Crypto 在本机完成。
- 文本盲水印加进去之后别人看得出来吗?
- 肉眼看不出来,可见字数也不变。但它不是保密手段:用本页、Unicode 转换工具,或者在编辑器里打开「显示隐藏字符」都能发现零宽字符,懂行的人还能读出没加口令的内容。所以它适合做追踪标记;不想让别人读出内容,请勾选口令加密。
- 为什么发到某些平台后零宽字符水印提取不出来?
- 部分平台、输入框、短信、转 PDF 或截图识字(OCR)会过滤或丢失零宽字符;截图后手动重打一遍,水印必然丢失。建议发出前把结果粘回「提取水印」自测一次;如果某个平台只过滤 U+200D 这类字符,可以改用「兼容」字符集再试。
- 只复制了文章的一部分,文本水印还能找到吗?
- 默认「每段都嵌一份」,每个段落里都有一份完整的文本水印,所以只要复制了任意一整段就能提取出来。如果只复制了半段、又刚好没包含插入点(每段第一个字之后),这一份就读不出来了;选「只在开头嵌一份」时,只有开头那段带水印。
- 零宽字符在线解码为什么显示不是本站格式?
- 各家零宽字符工具的编码格式不同,本页只能完整识别自己生成的水印(带魔数和 CRC32 校验,不会误报)。遇到别家格式,页面会自动尝试把两种零宽字符当成二进制 0 和 1、按 8 位或 16 位一组解码,CTF 里常见的题型通常能直接出结果;其他私有格式不保证能解。
- 零宽字符水印会不会把表情符号弄乱?
- 不会。表情符号的组合(比如一家三口、带肤色的点赞)本身就靠零宽连接符 U+200D 拼起来,所以插入点会避开表情符号两侧,免得把两个表情粘成一个新表情。提取板块的「去掉水印」也只删本站水印,表情里的零宽连接符原样保留,并在统计里单独标出。
- 零宽字符隐写加口令后为什么出现两条水印?
- 口令加密每次都会生成随机的盐和初始向量,同一句话加密两次,密文也完全不同,所以对同一段文字加了两次水印时,提取板块会显示成两条加密水印。输入口令解开后,两条的内容是一样的。
- 零宽字符隐写免费吗,手机上能用吗?
- 免费,不用注册登录。手机和电脑浏览器都能用:在手机上长按粘贴载体文字,生成后点「复制」即可发到聊天软件或文档里;提取时同样整段粘贴。零宽字符在手机屏幕上一样看不见,所以发出前建议在同一台手机上粘回「提取水印」自测一次。
- 零宽字符水印最多能藏多少字,会变长吗?
- 明文隐藏内容上限 512 字节,一个汉字在 UTF-8 里占 3 字节,所以大约能藏 170 个汉字。可见字数不变,但字符串实际长度会变:用标准字符集时,一份水印占(9 + 内容字节数)× 4 个零宽字符,藏满 512 字节就是 2084 个;选「每段都嵌一份」时每段都要再加这么多。按字符数限长的输入框可能因此提示超长,隐藏内容写短一点(如「张三 0927」)更稳妥。
- 怎么彻底清除文字里的零宽字符?
- 在「提取水印」里粘贴文字,点「复制去掉水印后的文字」,可以一键去掉本站加的水印,其他字符原样保留。想把所有零宽字符、BOM、方向控制符等隐形字符一次删光,请用文本清理工具。
- CTF零宽隐写题怎么用这个工具解?
- 把题目文字整段粘到「提取水印」。页面会列出每种隐形字符的码点和个数;如果恰好有两种零宽字符,会自动按两种 0/1 对应关系、8 位和 16 位分组试解,把能解出可读文字的候选列出来,并标注推测的对应关系。三种以上字符混杂的题目,可以参考统计表手动推断编码。
零宽字符隐写的标准与兼容字符集怎么选
零宽字符隐写把每个字节拆成几个零宽字符:标准字符集用 4 种零宽字符,每字节 4 个;兼容字符集只用零宽空格和零宽非连接符两种,每字节 8 个,长一倍,但个别只过滤 U+200D 的平台上更容易保住。不确定时用标准,发出前自测一次。
| 对比项 | 标准(默认) | 兼容 |
|---|---|---|
| 用到的零宽字符 | U+200B / U+200C / U+200D / U+2060 | U+200B / U+200C |
| 每字节字符数 | 4 个(基 4) | 8 个(二进制) |
| 「张三」水印总字符数 | 60 个 | 120 个 |
| 适用场景 | 大多数聊天软件、文档、网页 | 标准字符集发出后提取不到时再试 |
零宽字符水印的帧结构:为什么不会误报
每一份文本水印都是一个完整的「帧」,固定开销 9 字节。算例:「张三」UTF-8 下是 6 字节,加上 9 字节开销共 15 字节,标准字符集乘 4 得 60 个零宽字符。提取时要魔数、版本和 CRC32 校验全部对上才算一条水印,表情符号里的零宽连接符或别家格式的零宽字符不会被当成水印。
| 字段 | 长度 | 说明 |
|---|---|---|
| 魔数 | 2 字节 | 固定为 0x5A(Z) 0x57(W),用来在一串零宽字符里定位水印 |
| 版本与标志 | 1 字节 | 高 4 位是版本号 1,最低位表示内容是否经过口令加密 |
| 长度 | 2 字节 | 内容的字节数;明文内容上限 512 字节 |
| 内容 | 按实际长度 | 隐藏内容的 UTF-8 字节;加口令时是 AES-256-GCM 密文 |
| CRC32 | 4 字节 | 覆盖版本、长度和内容,改动或丢失任何一个零宽字符都校验不过 |
常见的零宽字符与隐形字符一览
提取板块会逐个统计下表中的字符。零宽空格、零宽连接符这类字符在屏幕上不占位置,也常被用来做隐写术;方向控制符、软连字符等虽然不用于本页的水印,但也可能夹在复制来的文字里。
| 码点 | 名称 | 本页水印是否使用 |
|---|---|---|
| U+200B | 零宽空格 ZWSP | 是 |
| U+200C | 零宽非连接符 ZWNJ | 是 |
| U+200D | 零宽连接符 ZWJ | 是 |
| U+2060 | 单词连接符 WJ | 是 |
| U+FEFF | 零宽不换行空格 / BOM | 否 |
| U+200E | 从左到右标记 LRM | 否 |
| U+200F | 从右到左标记 RLM | 否 |
| U+202A | 从左到右嵌入 LRE | 否 |
| U+202B | 从右到左嵌入 RLE | 否 |
| U+202C | 弹出方向格式 PDF | 否 |
| U+202D | 从左到右覆盖 LRO | 否 |
| U+202E | 从右到左覆盖 RLO | 否 |
| U+2061 | 不可见函数应用 | 否 |
| U+2062 | 不可见乘号 | 否 |
| U+2063 | 不可见分隔符 | 否 |
| U+2064 | 不可见加号 | 否 |
| U+180E | 蒙古文元音分隔符 | 否 |
| U+00AD | 软连字符 | 否 |
| U+FE0F | 变体选择符-16(多为 emoji 组成部分) | 否 |
零宽字符隐写还有哪些叫法
零宽字符隐写也常被叫作零宽隐写、文本隐写、文字隐写,属于隐写术的一种;拿来追查泄露时,就是文本盲水印、文字水印、文本水印、隐形水印或防泄露水印。给水印加口令,就是常说的零宽字符加密,读出水印就是零宽字符解密或零宽字符在线解码;解 CTF零宽隐写题时,也可以直接把题目粘进来。英文资料里对应的是 zero width steganography 和 zero width characters。
想看清每个字符的码点,用 Unicode 转换;想删光复制来的文字里所有零宽空格等隐形字符,用 文本清理。