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密钥,满足不同安全级别需求。

RSA-2048示例:
输入: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)
  • 详细的处理统计信息
  • 结果一键复制或导出

使用步骤

1

选择密钥配置

页面会自动生成2048位PKCS#8格式的RSA密钥对。可以选择其他密钥长度(1024/3072/4096位)或格式(PKCS#1),然后点击"重新生成密钥对"

2

输入要加密的数据

在文本编辑器中输入要加密的内容。注意RSA有明文长度限制,2048位密钥最多加密245字节。如需加密大文件,请使用混合加密方案

3

执行加密或解密

点击"加密"使用公钥加密数据,点击"解密"使用私钥解密密文。右侧显示处理结果和统计信息,可以复制或导出

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字节开销

✅ 混合加密方案

对于超长数据,推荐使用混合加密:

  1. 生成随机对称密钥(如AES-256密钥)
  2. 使用对称密钥加密实际数据
  3. 使用RSA公钥加密对称密钥
  4. 传输加密后的数据和密钥
  5. 接收方用RSA私钥解密对称密钥
  6. 使用对称密钥解密实际数据

优势:结合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使用指南
  • 各语言密码库文档