JavaScript 加密主要依靠 Web Crypto API,支持 RSA/AES-GCM/SHA-256/ECDSA 等算法,需在安全上下文中运行;RSA 用于非对称加密与签名,AES-GCM 适合高速对称加密并带认证,SHA-256 用于不可逆哈希,ECDSA 用于身份认证;所有操作需注意密钥导出、IV 唯一性、加盐迭代等安全细节。
JavaScript 中实现加密主要依靠 Web Crypto API,它是浏览器原生支持的安全加密接口,无需第三方库,支持生成密钥、加解密、签名验签、哈希运算等。它基于标准的密码学算法(如 AES、RSA、SHA-256),且所有操作都在安全上下文中(https 或 localhost)执行。
适用于非对称加密场景,比如前端加密、后端解密,或数字签名。
crypto.subtle.generateKey("RSA-OAEP", true, ["encrypt", "decrypt"]) 可生成 RSA 密钥对
默认不可导出(extractable: false),如需导出需显式设为 true,但注意安全风险exportKey() 转成 PEM 或 JWK 格式,方便传输或存储适合加密敏感数据(如本地存储的 token、用户信息),速度快、安全性高。
crypto.subtle.generateKey("AES-GCM", true, ["encrypt", "decrypt"]) 生成对称密钥encrypt({ name: "AES-GCM", iv }, key, data),返回 ArrayBuffer;解密同理,必须用相同 IV 和密钥常用于密码摘要、文件校验、生成唯一标识等,不可逆。
crypto.subtle.digest("SHA-256", data),data 需是 ArrayBuffer 或 TypedArray
Array.from(new Uint8Array(hash)).map(b => b.toString(16).padStart(2,'0')).join('')
deriveKey + PBKDF2 加盐迭代派生密钥用于身份认证、防抵赖,比如前端签署请求、后端验证来源。
generateKey("ECDSA", true, ["sign", "verify"])(推荐 nistP256 曲线)sign("ECDSA", privateKey, data)
verify("ECDSA", publicKey, signature, data),返回布尔值基本上就这些。Web Crypto API 功能完整但接口偏底层,需手动处理编码(如字符串 → Uint8Array)、密钥管理、IV/盐值保存等细节。用好它,关键在理解每个算法的适用场景和安全约束,而不是堆砌功能。