别再乱用加密了!C# RSA 正确打开方式

张开发
2026/4/24 7:35:31 15 分钟阅读

分享文章

别再乱用加密了!C# RSA 正确打开方式
在很多 C# 项目里加密这块经常是“能用就行”密码直接明文传❌AES 一把梭❌RSA 只会用不会原理❌结果就是安全性看起来做了其实漏洞一堆。这篇文章不讲空理论直接从官方实现 → 实战代码 → 生产经验带你把 RSA 真正用对。一、官方实现.NET 原生就支持 RSA很多人第一步就错了一上来就找 NuGet 包。其实完全没必要。 在.NET里RSA 是原生支持的using System.Security.Cryptography;创建方式也很简单using RSA rsa RSA.Create(2048);✔ RSA 是什么公钥加密私钥解密公钥可以给前端私钥必须后端保存 这点非常关键前后端不需要共享密钥✔ 官方推荐写法避坑重点❌ 老写法不推荐RSACryptoServiceProvider 原因使用 SHA-1不安全API 已过时✔ 新写法推荐rsa.Encrypt(data, RSAEncryptionPadding.OaepSHA256); 重点使用 OAEP使用 SHA256安全二、NuGet 到底要不要装RSA 已经内置在System.Security.Cryptography✔ 什么时候需要1️⃣ 多语言兼容 用BouncyCastle适合Java / JS / C# 混合系统PEM 格式处理2️⃣ Token / 登录体系 用System.IdentityModel.Tokens.Jwt 但核心建议能用官方就用官方第三方只是补充三、实战RSA 加密解密直接能用1️⃣ 生成密钥using RSA rsa RSA.Create(2048); byte[] publicKey rsa.ExportRSAPublicKey(); byte[] privateKey rsa.ExportRSAPrivateKey();2️⃣ 加密公钥byte[] data Encoding.UTF8.GetBytes(敏感数据); byte[] encrypted rsa.Encrypt( data, RSAEncryptionPadding.OaepSHA256 );3️⃣ 解密私钥byte[] decrypted rsa.Decrypt( encrypted, RSAEncryptionPadding.OaepSHA256 ); string result Encoding.UTF8.GetString(decrypted);四、核心认知RSA 不是用来“加密数据”的很多人最大误区就在这里。 RSA 的本质是解决“密钥如何安全传输”❗ 为什么因为2048位 RSA ≈ 最多加密 245 字节 你用它加文件直接炸。✔ 正确姿势企业标准RSA AES 混合加密流程① 生成 AES 密钥② 用 RSA 加密 AES 密钥③ 用 AES 加密数据五、登录场景你项目正在用的标准流程① 请求获取公钥② 前端加密 openid / password③ 后端用私钥解密④ 生成 Token 优点防抓包防明文提升安全六、你很可能踩过的坑真实项目❌ 坑1每次请求都生成 RSA结果数据库爆炸登录逻辑异常✔ 正确做法公钥加过期时间5~10分钟或缓存Redis❌ 坑2前后端 padding 不一致RSAEncryptionPadding.OaepSHA256 前端必须一致否则直接解密失败❌ 坑3私钥乱存最危险行为写死在代码 / config七、最佳实践总结✔ RSA 只用于小数据登录、token✔ 大数据用 AES✔ 使用 OAEP SHA256✔ 密钥必须有生命周期✔ 私钥绝不能泄露八、一句话总结RSA 解决的不是“加密强度”而是“密钥分发安全”当你真正理解这一点就不会再把它当成“万能加密工具”而是作为整个安全体系中的关键一环。在实际项目中只有把RSA、AES、Token、密钥管理组合起来才能构建出一套真正可靠的安全方案。

更多文章