RSA在线加密解密
处理结果
RSA加密工具使用指南
RSA(Rivest-Shamir-Adleman)是1977年由Ron Rivest、Adi Shamir和Leonard Adleman共同提出的公钥加密算法,是最早也是应用最广泛的非对称加密算法之一。本工具提供专业的RSA在线加密解密服务,支持1024/2048/3072/4096位密钥,PKCS#1/PKCS#8两种标准格式,自动密钥对生成,适用于数据加密、密钥交换、数字签名等多种场景。
核心功能详解
🔐 多种密钥长度
支持1024/2048/3072/4096位RSA密钥,满足不同安全级别需求。
输入:
Hello RSA公钥:
2048位PEM格式公钥输出:
Base64编码的密文特点:
- 2048位是当前推荐的标准密钥长度
- 提供112位安全强度
- 预计安全至2030年
- 兼容性好,性能与安全平衡
📝 双标准格式
支持PKCS#1和PKCS#8两种标准密钥格式,兼容各种应用场景。
- PKCS#8:通用标准,推荐使用(默认)
- PKCS#1:传统RSA格式,向后兼容
- PEM编码,Base64格式
- 带标准头尾标记
- 跨平台、跨语言兼容
- 可与OpenSSL等工具互通
🎲 智能密钥生成
自动生成RSA密钥对,支持实时格式切换和重新生成。
- 页面加载时自动生成2048位密钥对
- 可选择密钥长度(1024-4096位)
- 可选择密钥格式(PKCS#1/PKCS#8)
- 一键重新生成密钥对
- 一键复制公钥/私钥
- 支持手动导入已有密钥
🔧 完整加解密功能
提供完整的RSA加密解密能力,支持多种编码格式。
- 公钥加密、私钥解密
- 支持UTF-8/Hex/Base64原文编码
- 支持Base64/Hex密文编码
- 自动处理填充(PKCS#1 v1.5)
- 详细的处理统计信息
- 结果一键复制或导出
使用步骤
选择密钥配置
页面会自动生成2048位PKCS#8格式的RSA密钥对。可以选择其他密钥长度(1024/3072/4096位)或格式(PKCS#1),然后点击"重新生成密钥对"
输入要加密的数据
在文本编辑器中输入要加密的内容。注意RSA有明文长度限制,2048位密钥最多加密245字节。如需加密大文件,请使用混合加密方案
执行加密或解密
点击"加密"使用公钥加密数据,点击"解密"使用私钥解密密文。右侧显示处理结果和统计信息,可以复制或导出
RSA算法详解
RSA是第一个既能用于数据加密也能用于数字签名的算法,其安全性基于大整数因数分解的数学难题。RSA密钥对包含一个公钥(用于加密)和一个私钥(用于解密),公钥可以公开分享,而私钥必须严格保密。RSA算法广泛应用于SSL/TLS、SSH、PGP、数字证书等领域,是现代网络安全的基石。
RSA 算法原理
🔢 数学基础
核心难题:大整数因数分解
- 选择两个大质数 p 和 q
- 计算 n = p × q(模数)
- 计算 φ(n) = (p-1) × (q-1)
- 选择公钥指数 e(通常为65537)
- 计算私钥指数 d,满足 e×d ≡ 1 (mod φ(n))
- 公钥:(e, n),私钥:(d, n)
🔐 加密解密过程
- 加密:密文 c = me mod n
- 解密:明文 m = cd mod n
- m 是明文数值,c 是密文数值
- 使用快速模幂算法计算
- 填充方案(PKCS#1 v1.5)处理明文
- 确保每次加密结果不同
RSA 密钥长度详解
1024位 (不推荐)
- 安全强度:约80位,已不安全
- 分解难度:现代计算能力可以破解
- 最大明文:117字节
- 使用建议:仅用于学习测试,不要用于生产环境
- 淘汰时间:2010年后不再推荐
2048位 (推荐)
- 安全强度:约112位,当前安全
- 分解难度:目前无法破解,预计安全至2030年
- 最大明文:245字节
- 使用建议:通用场景的标准选择
- 应用:HTTPS证书、SSH密钥、代码签名
- 性能:与安全性平衡良好
3072位
- 安全强度:约128位,高安全性
- 分解难度:预计安全至2040年以后
- 最大明文:373字节
- 使用建议:企业级应用、长期证书
- 性能影响:比2048位慢约2倍
- 应用:CA根证书、敏感数据加密
4096位
- 安全强度:约140位,极高安全性
- 分解难度:长期安全保障
- 最大明文:501字节
- 使用建议:根证书、政府机密、金融核心系统
- 性能影响:比2048位慢约4-6倍
- 权衡:适合长期存储,不适合频繁加密
PKCS#1 vs PKCS#8
PKCS#1(RSA专用)
格式特点:
- 公钥头:
-----BEGIN RSA PUBLIC KEY----- - 私钥头:
-----BEGIN RSA PRIVATE KEY----- - 仅适用于RSA算法
- 传统格式,向后兼容性好
- OpenSSL默认格式(旧版本)
适用场景:
- 需要与旧系统兼容时
- 某些库只支持PKCS#1时
- 明确只使用RSA算法
PKCS#8(通用标准)
格式特点:
- 公钥头:
-----BEGIN PUBLIC KEY----- - 私钥头:
-----BEGIN PRIVATE KEY----- - 支持多种算法(RSA、DSA、ECC等)
- 现代标准,推荐使用
- 包含算法标识符
- OpenSSL默认格式(新版本)
适用场景:
- 新系统开发(推荐)
- 需要算法灵活性
- 与现代密码库配合
- Java、Python等语言的标准格式
RSA 应用场景
🌐 SSL/TLS (HTTPS)
网站SSL证书使用RSA进行身份验证和密钥交换,保护网站通信安全
🔑 SSH身份认证
服务器登录使用RSA公钥认证,替代密码登录,提高安全性
✍️ 数字签名
软件签名、文档签名、代码签名等,确保来源可信和完整性
📧 邮件加密 (PGP/GPG)
使用RSA加密邮件内容或数字签名,保护邮件隐私和真实性
🔐 密钥交换
使用RSA传输对称加密密钥,结合AES等算法实现混合加密
💳 支付安全
银行卡支付、电子商务交易使用RSA保护敏感信息传输
🎫 数字证书
X.509证书体系使用RSA进行身份认证和信任链构建
🔒 VPN连接
VPN隧道建立时使用RSA进行密钥协商和身份验证
RSA使用建议与最佳实践
明文长度限制
⚠️ RSA加密长度限制
计算公式:最大明文长度 = (密钥长度/8) - 11字节
- RSA-1024:最多加密117字节
- RSA-2048:最多加密245字节
- RSA-3072:最多加密373字节
- RSA-4096:最多加密501字节
原因:PKCS#1 v1.5填充需要11字节开销
✅ 混合加密方案
对于超长数据,推荐使用混合加密:
- 生成随机对称密钥(如AES-256密钥)
- 使用对称密钥加密实际数据
- 使用RSA公钥加密对称密钥
- 传输加密后的数据和密钥
- 接收方用RSA私钥解密对称密钥
- 使用对称密钥解密实际数据
优势:结合RSA的安全性和AES的高效性
密钥管理最佳实践
🔑 私钥保护
- 加密存储:私钥文件应加密保存
- 权限控制:文件权限设为400或600
- 密码保护:使用强密码加密私钥
- 备份策略:安全备份私钥到多个位置
- 硬件保护:考虑使用HSM或智能卡
- 泄露处理:一旦泄露立即吊销并更换
🔄 密钥轮换
- 定期更换:建议每1-2年更换密钥对
- 证书有效期:遵循证书有效期管理
- 渐进式迁移:同时支持新旧密钥过渡
- 吊销机制:建立密钥吊销流程
- 版本管理:记录密钥版本和使用时间
📋 密钥分发
- 公钥公开:公钥可以安全公开
- 证书机制:使用数字证书验证公钥真实性
- 安全通道:通过HTTPS等安全通道分发
- 指纹验证:通过其他渠道验证公钥指纹
- 信任链:建立完整的信任链体系
安全注意事项
⚠️ 避免常见错误
- ❌ 使用1024位密钥(已不安全)
- ❌ 直接用RSA加密大文件
- ❌ 明文存储私钥
- ❌ 使用弱随机数生成器
- ❌ 在不安全网络传输私钥
- ❌ 长期不更换密钥
- ❌ 忽略填充方案的安全性
✅ 推荐实践
- ✅ 使用2048位或更高密钥
- ✅ 采用混合加密处理大数据
- ✅ 加密并限制私钥访问权限
- ✅ 使用密码学安全的随机数
- ✅ 使用PKCS#8标准格式
- ✅ 定期轮换密钥对
- ✅ 使用OAEP填充(如果可能)
跨语言实现参考
💻 常用编程语言
JavaScript/Node.js:
- JSEncrypt(本工具使用)- 浏览器端
- node-forge - Node.js端
- crypto模块 - Node.js原生
Java:
- java.security包
- Bouncy Castle库
Python:
- cryptography库
- PyCryptodome库
- rsa库
PHP:
- openssl扩展
- phpseclib库
Go:
- crypto/rsa包
- crypto/x509包
🔧 命令行工具
OpenSSL:
- 生成密钥对
- 格式转换
- 加密解密
- 证书管理
GnuPG:
- PGP加密
- 数字签名
- 密钥管理
常见问题
❓ 为什么每次加密结果都不同?
RSA使用随机填充(PKCS#1 v1.5 Padding),在明文前添加随机字节。这确保相同明文每次加密产生不同密文,防止字典攻击。这是正常且必要的安全特性,解密时会自动去除填充。
❓ RSA可以加密多大的数据?
RSA不适合加密大数据。2048位RSA最多加密245字节。对于大文件,应使用混合加密:用AES加密数据,用RSA加密AES密钥。这样既保证安全性,又提高效率。RSA的强项是密钥交换和数字签名,而非大数据加密。
❓ 2048位密钥还安全吗?
2048位RSA密钥目前是安全的。根据NIST估算,2048位密钥预计安全至2030年。对于一般商业应用,2048位足够。但如果需要长期保密(10年以上)或极高安全需求,建议使用3072位或4096位。量子计算机可能在未来威胁RSA,届时需要迁移到抗量子算法。
❓ 能否用私钥加密、公钥解密?
理论上可以,但这不是加密的正确用法,而是数字签名的原理。私钥"加密"(签名)证明身份,公钥"解密"(验证)证明来源可信。真正的加密应该是公钥加密、私钥解密,这样只有持有私钥的人才能解密。
❓ PKCS#1和PKCS#8有什么区别?
PKCS#1是RSA专用格式,头部包含"RSA"字样。PKCS#8是通用格式,支持多种算法,头部不含算法名。推荐使用PKCS#8,因为它是现代标准,兼容性更好,Java、Python等语言默认使用PKCS#8。两者可以互相转换。
学习资源
📚 技术标准
- PKCS#1 v2.2 - RSA加密标准
- PKCS#8 - 私钥信息语法标准
- RFC 8017 - RSA算法规范
- NIST FIPS 186-4 - 数字签名标准
🔧 工具文档
- OpenSSL文档
- JSEncrypt使用指南
- 各语言密码库文档