河南做网站的公司seo关键词排名优化推荐
RSA 加密算法全面介绍
前言
js加密、js解密,js业务相关,去jsjiami官网站长vx。
一、什么是 RSA?它从哪来?
RSA 是一种非对称加密算法,由三位麻省理工学院的学者 Rivest、Shamir 和 Adleman 于 1977 年共同提出,因此用他们姓氏的首字母命名为 RSA。
它是世界上第一个公开的、既可用于加密数据又可用于数字签名的非对称算法,广泛用于安全通信中,如 HTTPS、SSL/TLS 等。
<div align="center"><img src="https://upload.wikimedia.org/wikipedia/commons/8/88/RSA_Algorithm_diagram.png" width="600" alt="RSA 加密流程图" /><p style="text-align:center">图:RSA 加密与解密流程图(来源:Wikipedia)</p>
</div>
二、RSA 的作用和特点
✅ 主要作用:
- 信息加密:通过公钥加密,防止信息在传输过程中被窃听。
- 身份认证:通过私钥签名,验证发送者身份,防止伪造。
- 密钥交换:常用于安全协议中传输对称加密的密钥(如 AES 密钥)。
🧩 主要特点:
- 使用一对密钥对:公钥 (public key) 和私钥 (private key)。
- 加密和解密不对称:公钥加密的数据只能用私钥解密,反之亦然。
- 安全性基于大素数分解的数学难题。
三、RSA 的优点与缺点
优点 | 缺点 |
---|---|
🔒 安全性高,理论上难以破解 | 🐢 加解密速度慢,性能不如对称加密(如 AES) |
🧾 可用于加密 + 数字签名 | 📏 密钥长度长,数据加密块有限制(通常限制在密钥长度以内) |
🛡️ 便于密钥分发(只需发送公钥) | 📉 不适合大批量数据加密(常与对称加密配合) |
四、适合使用 RSA 的场景
- 👥 用户身份验证:登录系统、签发 JWT 等。
- 📡 SSL/TLS 通信:浏览器访问 HTTPS 网站时的加密握手。
- 🔑 加密对称密钥:将 AES 密钥用 RSA 加密发送。
- 📧 数字签名与电子邮件加密:如 PGP/GPG。
五、JavaScript 中的 RSA 加密实践
我们可以使用 node-forge 或 crypto 模块来生成密钥和进行加解密。
1️⃣ 安装依赖:
npm install node-forge
2️⃣ JavaScript 示例代码(使用node-forge**):**
const forge = require('node-forge');// 生成密钥对
const keypair = forge.pki.rsa.generateKeyPair({ bits: 2048, e: 0x10001 });const publicKey = forge.pki.publicKeyToPem(keypair.publicKey);
const privateKey = forge.pki.privateKeyToPem(keypair.privateKey);console.log('🔐 公钥:\n', publicKey);
console.log('🔑 私钥:\n', privateKey);// 明文
const message = 'Hello RSA!';// 加密
const encrypted = keypair.publicKey.encrypt(forge.util.encodeUtf8(message), 'RSA-OAEP');
console.log('🔒 加密内容(Base64):', forge.util.encode64(encrypted));// 解密
const decrypted = keypair.privateKey.decrypt(encrypted, 'RSA-OAEP');
console.log('📜 解密后明文:', forge.util.decodeUtf8(decrypted));
🧪 输出示例:
🔐 公钥:
-----BEGIN PUBLIC KEY-----
...
-----END PUBLIC KEY-----🔒 加密内容(Base64): A1B2C3...📜 解密后明文:Hello RSA!