免费隐私工具
在浏览器中加密文件
选一个文件,设一个密码短语,下载一份加密副本。AES-256-GCM,密钥就在你的浏览器里派生。绝无上传,加载后可离线使用。格式在下方逐字节写有文档,你不必对我们的任何话照单全收。
完全在此标签页中运行。绝无上传,加载后可离线使用。
任何文件都行。大文件需要内存。见下方“诚实的局限”。
没有任何恢复手段。忘记密码短语,就意味着这个文件没有人能再打开,包括我们。
每个参数,公开说明
- 加密算法
- AES-256-GCM(WebCrypto),128 位标签
- 密钥派生
- PBKDF2-HMAC-SHA-256,600,000 次迭代
- KDF 盐值
- 16 字节,CSPRNG,每个文件新生成
- GCM 随机数
- 12 字节,CSPRNG,每个文件新生成
- 认证数据
- 整个 42 字节头部,因此篡改任何声明的参数都会使解密失败
- 密码短语编码
- UTF-8,NFC 规范化(同一短语在任何设备上输入都派生同一密钥)
诚实的局限
这不是 Sealby 应用的保险库格式。应用用按设备校准的 Argon2id 派生密钥,把密钥包裹在 Secure Enclave 中,并把内容存放在可否认的分块容器里。这些没有一样是网页能做到的。本页是一个基于浏览器原生能力构建的独立工具。
PBKDF2 不是内存困难的。它是浏览器唯一原生自带的密钥派生函数,600,000 次迭代让每次猜测都变慢,但 GPU 破解设备攻击它仍远快于攻击 Argon2id。因此保护都押在你的密码短语上:四个或更多随机单词,而不是一个密码。
WebCrypto 一次性完成加密。没有流式处理,处理期间整个文件会以两到三倍的体积占用内存。几百 MB 在大多数设备上没问题。数 GB 的归档请用桌面工具。加密输出还会透露文件的大致大小。文件名加密在内部,但大小不被隐藏。
格式,逐字节
技术读者独立验证本页输出所需的一切,或者用二十行 Python 解密它:
| bytes | field | contents |
|---|---|---|
| 0–7 | magic | ASCII "SBXF0001" |
| 8 | version | 0x01 |
| 9 | algorithm | 0x01 = AES-256-GCM + PBKDF2-HMAC-SHA-256 |
| 10–13 | iterations | uint32,大端序(600,000) |
| 14–29 | salt | 16 字节 |
| 30–41 | nonce | 12 字节 |
| 42–end | ciphertext | 载荷的 AES-256-GCM 密文,AAD = 字节 0–41;最后 16 字节为 GCM 标签 |
加密前的载荷:[2 字节名称长度,大端序][文件名,UTF-8][文件字节]。原始文件名以加密形式随行;解密时恢复。
参考解密器(Python,cryptography 库)
import sys, hashlib, struct, unicodedata
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
raw = open(sys.argv[1], "rb").read()
assert raw[:8] == b"SBXF0001" and raw[8] == 1 and raw[9] == 1
iters = struct.unpack(">I", raw[10:14])[0] # 600000
salt, nonce, ct = raw[14:30], raw[30:42], raw[42:]
phrase = unicodedata.normalize("NFC", sys.argv[2]).encode()
key = hashlib.pbkdf2_hmac("sha256", phrase, salt, iters, 32)
plain = AESGCM(key).decrypt(nonce, ct, raw[:42]) # AAD = header
name_len = struct.unpack(">H", plain[:2])[0]
name = plain[2 : 2 + name_len].decode()
open(name, "wb").write(plain[2 + name_len :])
print("decrypted ->", name)这是演示。保险库才是产品。
一个文件、一个密码短语、一个页面。这是浏览器能做到的。Sealby 把它做到位:按你的设备校准的 Argon2id、存于 Secure Enclave 的密钥,以及不留存任何列表或数量的隐藏保险库。
iPhone 和 iPad · iOS 17+ · 免费