HTML5 Web Crypto API 可在浏览器端实现端到端文件加密:读取文件为ArrayBuffer,生成或导入AES-GCM密钥,用唯一IV加密并封装元数据,全程密钥不离设备。
HTML5 的 Web Crypto API 可以在浏览器端对文件进行加密,无需上传服务器,保护用户数据隐私。核心思路是:读取文件 → 生成密钥或导入密钥 → 使用 AES-GCM 等算法加密 → 输出加密后的二进制数据(如 ArrayBuffer 或 Blob)。整个过程全程在客户端完成,密钥不离开用户设备。
加密前需将文件内容加载为可操作的二进制格式:
reader.result(即 ArrayBuffer)推荐使用 AES-GCM(兼顾加密与完整性校验),密钥需通过安全方式生成或派生:
crypto.subtle.generateKey("AES-GCM", true, ["encrypt", "decrypt"])
exportKey("jwk") 并由用户自行保管;导入时用 importKey()
AES-GCM 加密需要密钥、待加密数据、随机初始化向量(IV)和可选的附加认证数据(AAD):
crypto.subtle.encrypt({ name: "AES-GCM", iv, additionalData }, key, data)
加密完成后,需将密文、IV、算法参数等合理封装以便后续解密:
iv(Base64 编码)、algorithm、data(密文 Base64 或直接为 Blob)
URL.createObjectURL() 触发下载不复杂但容易忽略细节,比如 IV 管理、密钥导出格式、Promise 异步顺序和错误捕获。只要每步验证类型与权限,就能稳定实现浏览器内端到端文件加密。