RSA 加密算法全面介绍

161 阅读2分钟

RSA 加密算法全面介绍

WX20231204-144436@2x.png

前言

js加密、js解密,js业务相关,去jsjiami官网站长vx。

一、什么是 RSA?它从哪来?

RSA 是一种非对称加密算法,由三位麻省理工学院的学者 Rivest、Shamir 和 Adleman 于 1977 年共同提出,因此用他们姓氏的首字母命名为 RSA

image1.png

它是世界上第一个公开的、既可用于加密数据又可用于数字签名的非对称算法,广泛用于安全通信中,如 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!