CryptoImage 是一个运行在 Cloudflare Workers 上的本地媒体处理工作台。图片、视频、密钥和待处理文件都在浏览器中处理,Worker 只负责返回页面,不接收或保存媒体内容。
试用地址:https://cryptoimage.just404.eu.org/
源码仓库:https://github.com/luminousott/cryptoimage
请先给仓库点亮 Star,再点击 Fork this repository,最后在自己的 Fork 中点击第三步部署按钮。部署按钮使用相对 Actions 地址,因此 Fork 后会自动指向当前用户的仓库,不会操作 luminousott/cryptoimage 主仓库。
- Cloudflare Workers:在 Fork 的
Settings → Secrets and variables → Actions中添加CLOUDFLARE_API_TOKEN和CLOUDFLARE_ACCOUNT_ID,然后打开 Cloudflare 工作流并点击Run workflow。Token 需要具备 Workers 脚本部署权限。 - GitHub Pages:打开 Fork 的 Pages 工作流并点击
Run workflow。工作流会尝试自动启用 Pages;如果权限不足,请在 Fork 的Settings → Pages将部署来源设为GitHub Actions后重新运行。 - 为什么必须 Fork:部署凭据和 Pages 站点都属于部署者自己的账号。主仓库不保存个人 Cloudflare Token,也不替用户将站点部署到主仓库。
GitHub Pages 版本会生成 /curve/、/prism/、/cloak/ 和 /files/ 独立页面,不运行 Worker 路由;图片、视频、密钥和二维码识别仍在访问者设备中处理。Cloudflare Workers 版本使用 Worker Assets 托管同一套静态页面、Tailwind CSS 和浏览器脚本。
- 图片/视频混淆:以 Gilbert 2D 空间填充曲线为基础,图片逐像素处理,视频逐帧处理;可选密钥控制曲线偏移。PNG 可继续还原,JPG、WebP、AVIF 适合分享或预览。
- 光棱坦克页面:参考 Mirage_Decode,使用里图与表图的交错像素和亮度区间生成视觉混淆图;该页面不提供单页定位恢复包。
- 幻影坦克页面:参考 Mirage_Cloak,按 v0-v5 分版本提供生成。v0-v3 可解码隐藏文件,v4-v5 使用 RGBA 透明度和颜色混合,仅提供视觉生成。
- 隐藏信息:混淆图片可选写入短文本,恢复时显示检测到的内容。
- Gilbert 视频处理:图片/视频混淆页中的视频分支逐帧执行,支持 WebM;MP4 仅在浏览器原生支持对应编码时可用,可选择帧率、质量和音轨。
- SECURE FILE:使用 AES-256-GCM 和 PBKDF2-SHA256(210000 次迭代)加密任意本地文件,输出
.cimg并保留原文件元数据。 - CIR2 单页定位恢复包:图片/视频混淆页可将恢复参数、二维码、四角定位标记和混淆图预览放在同一张 PNG 中。上传完整分享图时可自动定位混淆图区域;截图或平台压缩后会尽力近似恢复,但无法保证丢失像素重新出现。
- 进入“图片/视频混淆”页上传图片或视频,再选择“混淆”或“还原”。
- 按需要填写密钥、选择输出格式,或勾选“生成单页定位恢复包”。
- 将生成的分享图完整保存或分享;恢复时直接上传该图,页面会自动检测 CIR2 恢复包。
- 需要保留原始字节时使用
SECURE FILE,并牢记密钥。密钥不会写入 URL、二维码或 Worker 请求。
- “图片/视频混淆”页只提供 Gilbert 曲线相关选项:图片输出格式、隐藏信息、视频质量/帧率/格式/音轨和单页恢复包。
- “光棱坦克”页只提供里图、表图、亮度和交错参数,不使用 Gilbert 密钥,也不生成单页定位恢复包。
- “幻影坦克”页按版本提供里图、表图和 PNG 生成;v0-v3 另有隐藏文件解码入口,v4-v5 仅生成视觉图。
- “文件加密”页只提供 AES-256-GCM 文件封装,生成
.cimg文件,不能用普通图片查看器打开。 - Gilbert 密钥不是上传到服务器的密码。加密和还原必须使用相同密钥;忘记密钥时无法恢复密钥控制的结果。
页面按算法拆分:/curve/ 是 Gilbert 图片/视频页,/prism/ 是光棱坦克页,/cloak/ 是幻影坦克页,/files/ 是文件加密页。视频仍属于 Gilbert 页,只在上传视频后显示帧率、质量、格式和音轨选项。
在 /curve/ 页面选择“混淆”或“还原”。图片混淆时可以设置密钥、写入短隐藏信息和生成单页定位恢复包;上传视频后会切换到逐帧输出选项。还原普通混淆图时直接上传 PNG 并输入原来的密钥即可;上传分享图时页面会先尝试识别恢复包,再定位其中的混淆图区域。
PNG 保留完整像素,适合后续还原。JPG、WebP 和 AVIF 会经过编码器处理,适合发布预览,但不适合作为要求逐像素还原的中间文件。隐藏信息只在混淆时写入,成功还原后会显示在结果说明中。
视频上传到 /curve/ 后会在浏览器中逐帧执行 Gilbert 像素变换,再使用浏览器的 MediaRecorder 导出。可以选择输出质量、帧率、是否处理音轨和 WebM/MP4 格式。MP4 是否可用取决于当前浏览器支持的编码器,页面会在处理前检测;不可用时请选择 WebM。
视频勾选“生成单页定位恢复包”后,会为处理过程中的每一帧生成定位帧和二维码。定位帧适合截图分享和单帧验证;要还原完整视频,仍需保存并上传完整的视频结果文件,而不是只上传某一帧截图。
单页恢复包是一张 PNG 分享图,包含以下内容:
- 二维码:保存图像尺寸、显示缩放、边框留白、算法版本和是否使用密钥等恢复参数。
- 四角定位标记和边缘时序条:从包含其他页面内容的截图中锁定混淆图的准确区域。
- 混淆图预览:二维码旁边或同一画布中显示实际要恢复的混淆结果。
生成时可以在高级设置中调整上下左右边框留白。页面会根据图片尺寸动态调整显示倍率和二维码大小,尽量让混淆图占据更大的画布。接收方只需上传完整分享图或完整截图,不需要额外上传二维码文件或原始混淆图;识别后如果恢复参数标记为使用密钥,页面会要求输入密钥。
定位包对截图有容错处理,会尝试校准透视、偏移和平台压缩造成的采样误差。但截图被裁剪、二维码不可读、混淆图像素被严重缩小或平台重新编码时,只能输出近似结果,无法凭空恢复已经丢失的原始像素。需要可靠的逐像素还原时,请直接传递 PNG 文件。
为什么截图还原后有少量像素错误? 截图可能发生缩放、插值、锐化、JPEG 压缩或颜色转换。恢复器会进行多点采样和边界校准,但这些操作不可逆。
为什么恢复包无法识别? 请上传完整画布,确保二维码、四角标记和混淆图没有被裁掉;也不要先把截图再次压缩或转发多次。
为什么第二次点击不能连续混淆? 每次操作都以当前上传的文件为输入。要重新执行同一方向的处理,请重新选择原始文件或重新上传上一次导出的结果。
Worker 会看到我的文件吗? 不会。Worker 只返回 HTML、CSS 和内嵌脚本,文件读取、曲线变换、视频处理、二维码识别和 Web Crypto 都在浏览器本地完成。
环境要求:Node.js 20 或更高版本。
npm install
npm run dev # 启动本地 Worker,默认 http://localhost:8787
npm run build:static # 生成 Cloudflare Worker Assets 到 public/
npm run check # 构建静态资源并检查源码语法
npm run build:pages # 生成 GitHub Pages 静态站点到 dist/
npm test # 运行 Node 原生契约测试
npm run deploy:dry # 校验 Worker 打包,不发布
npm run deploy # 发布到 wrangler.jsonc 配置的 Worker项目不依赖外部 CDN。npm run check、npm test 和 npm run deploy:dry 会自动生成被 Git 忽略的 src/vendor/ 和 public/;Cloudflare 部署前会先执行 npm run build:static。浏览器功能由人工测试,不做自动浏览器回归。
src/worker.js:Worker 路由、Assets 转发和安全响应头;没有 Assets 绑定时保留内联 fallback。src/routes.js:真实多路径和功能页配置。src/app.js:按路径生成独立页面 HTML 结构和 Tailwind class。src/tailwind.css、tailwind.config.js:Tailwind 输入文件和扫描配置。src/styles.js:无 Assets fallback 的最小样式。src/client.js:像素曲线、视频帧、Web Crypto、二维码恢复和 DOM 交互。src/visual-algorithms.js:光棱坦克、幻影坦克和隐藏文件算法模块。scripts/build-static.mjs:生成 Cloudflare Assets 页面和浏览器脚本。scripts/build-pages.mjs:生成 GitHub Pages 的多路径静态目录。src/version.js:客户端版本和.cimg元数据版本。tests/worker.test.js:Node 原生契约测试。wrangler.jsonc:Cloudflare Workers 配置。
PIXEL 是可逆的视觉混淆,不等同于密码学加密;需要机密性时使用 SECURE FILE。有损格式、截图缩放、裁剪和平台压缩可能破坏像素,单页恢复包只能在可识别二维码且混淆图区域仍可读取时尽力恢复。
本项目是实验性开源软件,仅供合法的个人使用、学习和安全研究。使用者应自行确认拥有所处理文件的合法权利,并自行承担使用、分享、丢失或损坏文件产生的全部责任。
PIXEL 混淆不等同于密码学加密;截图、裁剪、有损压缩、浏览器编码器差异或设备故障可能导致无法完整还原。项目不保证处理结果的完整性、可用性、兼容性或持续在线,也不构成任何安全、隐私、合规或法律建议。使用前请保留原始文件备份,重要内容请先在副本上验证。
本项目采用 MIT License 开源。除项目自身代码外,第三方依赖及其许可证仍以各自项目声明为准。