
所有云存储服务、所有文件分享平台、所有号称”安全”的上传工具,都有一个共同点:你的文件要经过别人的服务器。你得信任服务商的加密方案、他们的密钥管理、他们的员工,以及他们面对数据调取请求时的处置方式。对一个素未谋面的公司来说,这种信任成本不低。
那么,如果加密在文件离开本机之前就已经完成——直接在浏览器里,服务器根本看不到明文呢?
这正是 hat.sh 在做的事。
hat.sh 到底做什么
hat.sh 是一款基于浏览器的文件加密工具。把文件拖到页面上,输入密码(或提供公钥),它会输出一个加密后的 .enc 文件。解密时,把 .enc 文件拖回同一个页面,输入密码,原始文件就回来了。全程在 JavaScript 里本地完成——没有把文件内容发出去的网络请求,没有后端,没有数据库。
使用的加密方案是 AES-256-GCM,这也是 Signal、WhatsApp 以及大多数现代 TLS 连接所采用的算法。它是认证加密,意味着如果文件在传输过程中被篡改,解密会明确报错——不会静默损坏。你没办法悄悄改一个加密文件然后让 hat.sh 接受它。
hat.sh 支持两种模式:
- 基于密码的加密:设置一个密码,工具用 PBKDF2 从密码派生出加密密钥。任何人只要有密码就能解密。
- 公钥加密:生成一对密钥,把公钥分享出去,任何人都能加密只有你能用私钥打开的文件。底层使用 X25519 密钥交换结合 AES-256-GCM。
公钥模式对团队协作特别实用。比如记者可以公开自己的公钥,信源使用 hat.sh 加密文件后发送,发送方完全不需要做任何配置。
无需登录、无需上传、无需账号
这个工具的隐私模型干净得不像话。源代码在 GitHub 上,MIT 许可证——你可以直接读到浏览器里跑的是什么 JavaScript。没有遥测,没有带着文件元数据的分析请求,没有任何可能被攻破的服务端组件。
对比一下典型的”安全”文件分享服务:
| 特性 | 典型加密上传服务 | hat.sh |
|---|---|---|
| 文件发送到服务器 | 是 | 否 |
| 需要账号 | 通常需要 | 从不 |
| 服务器看到明文 | 取决于实现 | 否 |
| 源码可审计 | 很少 | 是(MIT) |
| 支持离线使用 | 否 | 是(首次加载后) |
像 VirusTotal 这样的工具,本来就是设计成把文件发到外部服务器的——那是它的功能。hat.sh 正好相反:核心设计就是你的文件内容哪都不去。
什么时候会用到 hat.sh
想象一个自由职业会计师,需要把税务文件发给客户。电子邮件是明文。大多数文件分享链接会过期或被收录索引。她想要一个简单方案:打开网页,用共享密码加密文件,发送结果。
或者一个开发者正在轮换仓库里的凭证。他需要把一个 .env 文件一次性安全地发给同事,又不想为了这一次传输搭建一套 GPG 密钥基础设施。hat.sh 让他可以用一次性密码加密,然后把 .enc 文件通过 Slack、Discord 或邮件发出去。没有密码,加密文件毫无意义。
对安全研究人员来说,公钥模式有真实的用处。你可以在个人网站上公开公钥,让任何人向你发送加密文件——收件方不需要安装任何东西。不需要 PGP 密钥服务器,不需要 GPG 客户端,不需要 Web of Trust 那一套复杂体系。
客户端加密的技术诚意
客户端加密有一个值得正视的局限:如果网站本身被攻陷,恶意 JavaScript 可能在加密前就把密码或文件偷走。这是所有基于浏览器的加密工具都面临的根本性张力。
hat.sh 从几个维度应对这个问题。第一,开源代码意味着任何人都可以审计 JavaScript。第二,你可以下载仓库在本地运行 hat.sh,完全气隙环境。第三,对安全要求极高的用户,项目提供了 Docker 配置用于自托管。
对于大多数使用场景——把敏感文档发给同事、加密后上传到云存储、保护配置文件——威胁模型根本不涉及 CDN 被攻陷。比起明文传文件,浏览器端加密已经是实质性的安全提升。
如果你想了解浏览器如何处理加密,可以看看 Web Crypto API 规范——hat.sh 底层就是用这套原生浏览器接口。这不是自定义实现,意味着加密操作跑的是经过优化的 C++ 代码,而不是解释执行的 JavaScript。
hat.sh 与同类无需登录工具的对比
你可能用过 CyberChef,它也完全运行在浏览器里,也能处理 AES 加密。CyberChef 是一款通用数据转换工具——编码、压缩、哈希,还有几百种其他操作,加密只是其中之一。这种广度让它很强大,但对非技术用户来说也相当复杂。
hat.sh 只做一件事:加密文件,让文件安全传输或存储。界面简洁到你可以把链接丢给一个不知道 AES 是什么的人,他一分钟内自己就摸清楚了。简单,就是它的功能。
Wormhole 解决的是相关但不同的问题——它支持点对点端到端加密传输文件——但需要双方同时在线,文件通过中继服务器路由。hat.sh 输出的是静态的加密文件,你可以通过任何渠道异步发送。
上手步骤
第一次使用 hat.sh 大概只需要 30 秒:
- 打开 hat.sh
- 把任意文件拖拽到页面上(或点击浏览)
- 选择「Password」模式,输入一个强密码短语
- 点击 Encrypt——你会下载到一个
.enc文件 - 通过任意渠道发送
.enc文件;单独发送密码
解密:
- 打开 hat.sh
- 把
.enc文件拖到页面上 - 输入密码
- 原始文件自动下载
全程不需要账号、不需要安装、不需要信任任何第三方。加密文件就是一堆字节——你可以存到 Dropbox、发邮件,甚至公开发布。没有密码,它就是一堆看不懂的数据。
隐私工具往往面临两难:要么安全性够强但复杂痛苦(比如 GPG),要么用起来简单但数据得交给别人的服务器。hat.sh 走了另一条路——一个设计良好、透明、开源的 Web 应用,可以两者兼得。随着浏览器能力持续增强、Web Crypto API 日趋成熟,会有越来越多工具走这条路:服务器只负责分发代码,所有敏感操作都在你的机器上完成。