Skip to content

Latest commit

 

History

History
71 lines (56 loc) · 5.09 KB

File metadata and controls

71 lines (56 loc) · 5.09 KB

TextMark 测试报告 / Test Report

日期:2026-08-29 · 版本:v1 · 环境:Node v22.14.0 + Chromium 151 (Playwright)

1. 单元测试(Node,33/33 通过)

node tests/codec.test.js

类别 用例 结果
emoji 表 256 个唯一单码位 emoji;与公开区间规则一致 PASS
CRC32 标准向量 "123456789" → 0xCBF43926 PASS
Reed-Solomon 无错往返;1/4/8/16 字节错误全部纠正;多块含错往返;20 字节错误明确报错(不静默错解码) PASS
明文/压缩/加密往返;错误密码拒绝;缺密码标记;CRC 抓篡改 PASS
隐形层往返 消息长度 0 / 1 / 6 / 17 / 100 / 5000 字(中英 emoji 混合)全部恒等 PASS
VS16 冲突 文本以 ❤️🔥⭐ 结尾仍正确解码;纯 emoji 文本零误报 PASS
抗损坏 随机翻转 3% 隐形字符 → RS 纠错后完整解码 PASS
删除损坏 删除 10 个隐形字符 → 响亮报错,绝不输出错误消息 PASS
分段嵌入 5 段文本仅剩末段副本仍解码;每个段落都带独立副本;副本数封顶 MAX_REPLICAS = 20 PASS
相邻帧 多份副本被合并成一个 VS 连续段时,逐位偏移扫描能全部找到 PASS
加密流 加密水印自动关闭 emoji 层;无密码提示输入;错误密码拒绝 PASS
emoji 层 中英/emoji 消息往返;篡改 1 个 emoji → 校验拒绝;纯文本零误报 PASS
清除(strip) 双层全部移除后与原文逐字一致;保留 ❤️ 等真实变体选择符与普通 emoji;加密水印无需密码也能清除 PASS
端到端 双层同消息一致解码;10KB 消息往返 PASS

2. 浏览器端到端测试(Playwright + Chromium,全部通过)

python tests/e2e_browser.py

  • 加水印页:emoji 签名条开关默认关闭 → 输出中不含 📜,只有隐形层;点击输入框后圆角不变(焦点效果沿用字段自身圆角)
  • 打开 emoji 开关后重新生成:输出可见文本与原文逐字一致;统计 隐形字符 +89 · emoji +51 · 帧 57 字节(与理论值吻合:57+32=89;📜+2+2+45+1=51);自检 chip 显示"自检通过:可解码"
  • 分段模式:三段文本 → findVSRuns() 返回 3 段,即每段各带一份副本
  • 检测页:粘贴输出 → 自动识别双层并正确显示消息 © 2026 张三 · 文档编号 A-17 · 机密
  • 阴性对照:无水印原文 → 正确报告"未检测到水印"
  • 清除页:带水印文本 → 清理结果与原文完全相等(逐字符比对)
  • 规范页:256 格 emoji 表渲染完整;过滤 84 后恰好 255 格变暗;AI 提示词模板存在
  • 深浅色切换:data-theme 正确切到 dark;中英切换正常;控制台与页面零报错
  • 移动端(390×844,iPhone UA,is_mobile):Tab 栏变为悬浮底部栏且完整落在视口内;无横向溢出(scrollWidth - clientWidth ≤ 1);.tab / .btn-primary / .icon-btn 无一低于 40px 触控高度
  • 截图:tests/shots/1–9(含深色、英文、移动端与移动端规范页)

3. AI 可读性验证(本模型的手工解码实测)

样本:📜🌄🌕😀😊🙁🙉😭🙏🙋😭😲😰😲😶🙈(消息 AI-OK-2026

由 AI(Claude)仅凭公开规范手工解码,不执行任何解码代码:

  • 🌄→U+1F304→序号 84→0x54='T';🌕→101→0x65='e'(EMAGIC 吻合)
  • 😀😊→长度 N=10
  • 🙁🙉😭🙏🙋😭😲😰😲😶 → 65,73,45,79,75,45,50,48,50,54 → AI-OK-2026
  • 🙈→72;消息字节和 584 mod 256 = 72 ✓ 校验通过
  • 程序复核:解码结果与原始消息完全一致

结论:"把文本+公开提示词发给任意够强的 AI 即可读出水印"在符号级可行。注意:长消息(数百 emoji)手工解码对 AI 容易出错,建议 AI 可读层用于 ≤140 字节的短消息;长消息走隐形层+网站检测。

4. 鲁棒性预期(基于机制分析,未在本环境实测的平台标注为"预期")

场景 隐形层 emoji 层
浏览器/编辑器间复制粘贴 存活(已测) 存活(已测)
微信/备忘录/Google Docs 复制 预期存活(保留 Unicode) 预期存活
Markdown 渲染后复制 预期存活 存活
短信/ aggressive 清洗管道 可能被剥离 存活
轻度编辑(改几个字) 分段模式下幸存段落可解码 视编辑位置
AI 改写/翻译/重排 破坏 破坏

已知限制

  1. RS 纠错覆盖随机字节错误;删除/插入隐形字符会导致该副本不可解码(响亮报错,不会错解码)——分段嵌入模式可缓解。
  2. 帧头损坏超过 RS 纠错能力时无法定位帧尾 → 解码失败(不静默)。
  3. emoji 层无加密/无纠错(为 AI 手工解码刻意简化),由 SUM8 提供完整性校验。
  4. 加密水印与 AI 公开可读互斥(设密码时 emoji 层自动关闭)。
  5. 规范完全公开 ⇒ 任何人都能一键清除水印(本站「清除水印」页即可)。TextMark 提供的是归属证明与泄露追踪,不是防篡改/DRM。