非对称加密JS在项目中如何实现加密,常用库有哪些
- 云服务器
- 2026-07-23
- 6
非对称加密在JavaScript中的实现
非对称加密使用公钥和私钥对数据进行加密与解密,在JavaScript中,常见实现包括Node.js的crypto模块和浏览器侧的Web Crypto API。

Node.js中的crypto模块
- 生成密钥对:使用generateKeyPairSync创建RSA或ECC密钥。
- 加密与解密:通过publicEncrypt和privateDecrypt操作。
示例代码:

浏览器中的Web Crypto API
- 生成密钥对:使用subtle.generateKey,支持RSA-OAEP等算法。
- 加密与解密:通过subtle.encrypt和subtle.decrypt。
示例代码:

// 生成RSA-OAEP密钥对 window.crypto.subtle.generateKey( { name: "RSA-OAEP", modulusLength: 2048, publicExponent: new Uint8Array([1, 0, 1]), hash: "SHA-256", }, true, ["encrypt", "decrypt"] ).then((keyPair) => { const encoder = new TextEncoder(); const data = encoder.encode("浏览器端加密消息"); return window.crypto.subtle.encrypt( { name: "RSA-OAEP" }, keyPair.publicKey, data ); }).then((encrypted) => { console.log('加密后的字节数组:', new Uint8Array(encrypted)); });
常用库与API对比
| 库/API | 运行环境 | 支持算法 | 特点 |
|---|---|---|---|
| crypto模块 | Node.js | RSA、DSA、ECDH等 | 内置,性能高 |
| Web Crypto API | 浏览器 | RSA、ECDH、ECDSA等 | 异步,安全 |
| jsencrypt | 通用 | RSA | 轻量,易用 |
| node-forge | Node.js/浏览器 | RSA、DH等 | 功能丰富,兼容性好 |
相关问题与解答
问题1:非对称加密在JavaScript中为什么比对称加密慢?
解答:非对称加密依赖大数数学运算(如模幂运算),密钥长度通常为2048位或更高,计算开销大,JavaScript作为解释型语言,处理这类运算时效率低于编译型语言,而对称加密(如AES)使用位操作和循环,速度更快。
问题2:如何在JavaScript中安全存储私钥?
解答:私钥不应直接硬编码在客户端代码中,在Node.js中,使用环境变量或密钥管理服务(如Vault)存储,在浏览器中,利用Web Crypto API的不可导出属性(extractable: false)生成密钥,或通过后端处理敏感操作,避免私钥暴露给前端。