我如何用 Vanilla JS 且无需后端构建“Forever”文件上传器
Source: Dev.to
动机
我已经厌倦了当前的文件分享现状:
- WeTransfer:除非付费,否则只能上传 2 GB。
- Google Drive:需要登录并会追踪你的身份。
- Discord:大文件会被阻止。
我想要一种方式,能够在不付费租用服务器或泄露任何个人数据的前提下,永久地向朋友传输超大文件。
介绍 SimpleShare
SimpleShare 是一个仅在浏览器中运行的应用,它充当 分布式加密引擎,而不是传统的文件托管服务。
智能压缩
浏览器在文件离开你的电脑之前使用 CompressionStream API 对文件进行压缩,减小体积。
军规级加密
文件会被 AES‑256‑GCM 加密,转换成“数字噪声”,整个过程完全在客户端设备上完成。
原子切片
大文件(例如 10 GB)会被切分成 200 MB 的 “原子”,以便更容易处理。
账本
加密后的原子会通过公共 CORS 代理上传到 Catbox,这是一个永久文件托管服务。
密钥
网站会生成一个 12 位字符的代码(或一个魔法链接)。该代码包含定位你的原子所需的映射信息以及解密它们的密码。
实现细节
密钥派生示例(JavaScript)
async function deriveKeyFromPassword(password) {
const enc = new TextEncoder();
const keyMaterial = await window.crypto.subtle.importKey(
"raw",
enc.encode(password),
{ name: "PBKDF2" },
false,
["deriveKey"]
);
return window.crypto.subtle.deriveKey(
{
name: "PBKDF2",
salt: enc.encode("NeuralShareSalt"),
iterations: 100000,
hash: "SHA-256"
},
keyMaterial,
{ name: "AES-GCM", length: 256 },
true,
["encrypt", "decrypt"]
);
}
试一试
你可以在此处体验 SimpleShare: