最新消息:

ts-cms-ep-sfx:把加密文件变成一个可离线自解密的 HTML,浏览器就是解密器

佳软 yeeach 8浏览 0评论

 

给别人发送一个加密文件,真正麻烦的往往不是“怎么加密”,而是对方怎么解密?

使用 7-Zip,需要对方安装 7-Zip;使用 GPG,需要对方理解 GPG;使用 age,也需要安装相应工具;使用某个专用加密软件,则意味着收发双方最好都使用同一种软件。

最近登上 Hacker News 的开源项目 ts-cms-ep-sfx 提供了一个很有意思的思路:把加密数据和解密程序一起打包进一个 HTML 文件。

这样一来,接收者拿到的不再是一个需要特定软件打开的 .gpg、.age 或其他加密文件,而是一个普通的:encrypted.html

双击,用浏览器打开,输入密码,文件就在本地完成解密。整个过程甚至不需要联网。

这有点像过去 Windows 时代常见的 Self-Extracting Archive(SFX,自解压压缩包):

传统 SFX:压缩数据 + 解压程序 → 一个 EXE

ts-cms-ep-sfx:加密数据 + 解密程序 → 一个 HTML

 

在线Demo:https://cms-sfx-demo.apeleg.com/

Github:https://github.com/ApelegHQ/ts-cms-ep-sfx

Hacker News讨论:https://news.ycombinator.com/item?id=49827375

 

ts-cms-ep-sfx 的全称可以拆解为:

  • TS:TypeScript 开发
  • CMS:Cryptographic Message Syntax(密码消息语法)
  • EP:EncryptedPayload(加密载荷)
  • SFX:Self-Extracting / Self-Decrypting(自解压 / 自解密)

ts-cms-ep-sfx 项目的核心目标是实现零依赖、可独立审计且安全强韧的文件分享。

 

核心功能及亮点:

1. 零安装与跨平台(Zero Installation)

任何预装了浏览器的设备(Windows、macOS、Linux、iOS、Android)均可直接运行该文件。

 

2. 真正离线 / 离网(Air-gapped Native)

打包生成的 .html 文件中包含了解密所需的全部代码(通过嵌入轻量 Web Crypto API 或纯 JavaScript 密码学库)。解密过程完全在浏览器本地内存中进行,无需发起任何 API 网络请求,天然免疫网络嗅探与中间人攻击(MITM)。

 

3. 合规安全的加密模式

与许多小工具误用缺乏认证的 CBC 模式不同,该项目默认采用 AES-GCM 等提供关联数据认证加密(AEAD)的机制,确保密文防篡改。

 

4. 巧妙的 HTML 结构与结构可审计性

开发者通过对 HTML 结构的精密处理,使得密文数据与 OpenPGP / CMS 签名等安全信息嵌套在 DOM 结构中。更厉害的是,除了浏览器外,甚至可以直接使用命令行工具(如纯 openssl)提取并解密该文件,极大提升了长期归档的可救复性与透明度。

 

典型应用场景

  • 跨部门 / 跨机构敏感文件交付:当接收方使用的是高度受限的电脑(禁止安装任何第三方 .exe 或解压软件)时,HTML 是极少数被默认允许打开的格式。
  • 安全测试与样本隔离(Malware Sandboxing):在安全测试中,传输潜在敏感代码时往往需要避免被主机杀毒软件在传输中误杀。自解密 HTML 可以在保持隔离的同时,仅在测试人员主动输入密码时才生成解密后的流。
  • 应急响应与离线凭据库:将紧急预案或凭据打包成单个 HTML 存放在 U 盘中,即使在没有网络连接或没有安装专用软件的机房电脑上也能随时查看。

 

ts-cms-ep-sfx 这种设计也有一个非常明显的代价。

因为加密数据本身被嵌入 HTML。所以 500MB 文件最终会产生一个同等级甚至更大的 HTML。浏览器还需要解析 DOM、保存密文、执行加解密并生成恢复后的文件。

开发者明确提醒,整个内容在某些阶段可能需要在内存中存在多份,因此 RAM 会成为实际文件大小上限。

所以它更适合:PDF,Office 文档,合同,私人照片,密钥备份,配置文件,小型 ZIP,紧急恢复资料 等场景。而不是50GB 视频,TB 级备份,大型磁盘镜像,这些场景还是更适合流式加密工具。

 

自解密 HTML(Self-Decrypting HTML Page)的概念并非第一次出现,Hacker News 讨论中也提到了很多更早的项目,几个有趣且相关的同类型项目:

StatiCrypt:https://github.com/robinmoisson/staticrypt

PageCrypt:https://github.com/Greenheart/pagecrypt

Portable Secret:https://github.com/alcazarsec/portable-secret

self-decrypting-html-page:https://github.com/derhuerst/self-decrypting-html-page

pagevault:https://metafunctor.com/post/2026-02-13-pagevault/

 

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址