crypto2026-07-252 分钟阅读
什么是 RSA 加密
RSA 是最广泛使用的非对称加密算法,由 Rivest、Shamir、Adleman 三人于 1977 年提出。它使用一对密钥:公钥加密,私钥解密。
RSA 工作原理
密钥对生成:
选择两个大质数 p, q
计算 n = p × q
计算 φ(n) = (p-1)(q-1)
选择 e 使得 gcd(e, φ(n)) = 1
计算 d 使得 e×d ≡ 1 (mod φ(n))
公钥: (e, n) ← 可以公开
私钥: (d, n) ← 必须保密
加密: C = M^e mod n
解密: M = C^d mod n
RSA vs AES
| 特性 | RSA(非对称) | AES(对称) | |------|--------------|------------| | 密钥数量 | 一对(公钥+私钥) | 一个共享密钥 | | 加密速度 | 慢(1000x) | 快 | | 数据大小 | 有限制(< 密钥长度) | 无限制 | | 典型用途 | 密钥交换、数字签名 | 数据加密 | | 密钥长度 | 2048-4096 位 | 128-256 位 |
为什么需要 RSA 加密
- 安全通信:HTTPS/TLS 握手中的密钥交换
- 数字签名:验证数据完整性和来源
- API 认证:JWT RS256 签名验证
- 密钥交换:安全传输 AES 会话密钥
- 代码签名:验证软件发布者身份
如何使用在线工具
使用 DevToolkit Pro 的 RSA 加解密工具:
- 生成 RSA 密钥对(2048/4096 位)
- 使用公钥加密数据
- 使用私钥解密数据
- 创建和验证数字签名
- 支持 PEM 格式导入/导出
代码中的 RSA
JavaScript:Web Crypto API
// 生成 RSA 密钥对
async function generateRSAKeyPair() {
const keyPair = await crypto.subtle.generateKey(
{
name: 'RSA-OAEP',
modulusLength: 2048,
publicExponent: new Uint8Array([1, 0, 1]),
hash: 'SHA-256',
},
true,
['encrypt', 'decrypt']
);
return keyPair;
}
// 加密
async function rsaEncrypt(publicKey, data) {
const encoder = new TextEncoder();
const encrypted = await crypto.subtle.encrypt(
{ name: 'RSA-OAEP' },
publicKey,
encoder.encode(data)
);
return new Uint8Array(encrypted);
}
// 解密
async function rsaDecrypt(privateKey, encryptedData) {
const decrypted = await crypto.subtle.decrypt(
{ name: 'RSA-OAEP' },
privateKey,
encryptedData
);
return new TextDecoder().decode(decrypted);
}
Python:使用 cryptography 库
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import hashes, serialization
# 生成密钥对
private_key = rsa.generate_private_key(
public_exponent=65537,
key_size=2048,
)
public_key = private_key.public_key()
# 加密
ciphertext = public_key.encrypt(
b"Hello, RSA!",
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
# 解密
plaintext = private_key.decrypt(
ciphertext,
padding.OAEP(
mgf=padding.MGF1(algorithm=hashes.SHA256()),
algorithm=hashes.SHA256(),
label=None
)
)
FAQ
RSA 密钥长度如何选择?
- 2048 位:当前标准,足够安全
- 3072 位:更高安全要求
- 4096 位:最高安全级别(性能较低) NIST 建议至少 2048 位,2030 年后建议 3072 位以上。
RSA 和 ECC 哪个更好?
ECC(椭圆曲线)在相同安全级别下密钥更短(256 位 ECC ≈ 3072 位 RSA),性能也更好。但 RSA 更成熟、兼容性更好。新项目推荐 ECC,现有系统保持 RSA。
为什么 RSA 不能直接加密大文件?
RSA 加密有长度限制(密钥长度 - 填充开销),且速度慢。实际使用中,RSA 用于加密 AES 密钥,再用 AES 加密文件(混合加密)。
本文由 DevToolkit Pro 提供。更多开发者工具请访问 首页。
相关文章
SHA-256 vs MD5:什么时候该用哪个哈希算法(2026)
SHA-256 与 MD5 对比:安全性、速度和使用场景。了解 MD5 何时仍可接受、何时必须使用 SHA-256,附实用的决策指南。
MD5 Hash 完全指南:原理、用途与安全性
深入理解 MD5 算法的工作原理、常见用途和安全漏洞。了解 MD5 与 SHA-1、SHA-256 的区别,以及何时还能使用 MD5。
把 JWT 粘贴到在线解码工具安全吗?聊聊 Token 泄露风险
把 JWT Token 粘贴到在线解码工具安全吗?本文分析 jwt 在线解码的安全隐患、token 泄露风险,以及如何在不暴露隐私的前提下安全地解码 JWT。