Skip to content

Repository files navigation

CryptoImage

CryptoImage 是一个运行在 Cloudflare Workers 上的本地媒体处理工作台。图片、视频、密钥和待处理文件都在浏览器中处理,Worker 只负责返回页面,不接收或保存媒体内容。

试用地址:https://cryptoimage.just404.eu.org/

源码仓库:https://github.com/luminousott/cryptoimage

一键部署

1. Star this repository 2. Fork this repository 3. Deploy to Cloudflare Workers 3. Deploy to GitHub Pages

请先给仓库点亮 Star,再点击 Fork this repository,最后在自己的 Fork 中点击第三步部署按钮。部署按钮使用相对 Actions 地址,因此 Fork 后会自动指向当前用户的仓库,不会操作 luminousott/cryptoimage 主仓库。

  • Cloudflare Workers:在 Fork 的 Settings → Secrets and variables → Actions 中添加 CLOUDFLARE_API_TOKENCLOUDFLARE_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 中。上传完整分享图时可自动定位混淆图区域;截图或平台压缩后会尽力近似恢复,但无法保证丢失像素重新出现。

使用方式

  1. 进入“图片/视频混淆”页上传图片或视频,再选择“混淆”或“还原”。
  2. 按需要填写密钥、选择输出格式,或勾选“生成单页定位恢复包”。
  3. 将生成的分享图完整保存或分享;恢复时直接上传该图,页面会自动检测 CIR2 恢复包。
  4. 需要保留原始字节时使用 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 会经过编码器处理,适合发布预览,但不适合作为要求逐像素还原的中间文件。隐藏信息只在混淆时写入,成功还原后会显示在结果说明中。

Gilbert 视频处理

视频上传到 /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 checknpm testnpm 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.csstailwind.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 开源。除项目自身代码外,第三方依赖及其许可证仍以各自项目声明为准。

About

本地优先的图片、视频混淆与文件加密工作台

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages