C#怎么实现RSA非对称加密 C#如何用RSA算法进行公钥加密私钥解密和数字签名【安全】

应使用 RSA.Create() 创建 RSA 实例,避免过时的 RSACryptoServiceProvider;密钥导出用 ExportPkcs8PrivateKey/ExportSubjectPublicKeyInfo;加密须用 OAEP-SHA256 且校验明文长度;签名用 SignData/VerifyData 并指定 SHA256 和 PKCS1;私钥严禁明文存储。用 RSA.Create() 创建实例,别碰过时的 RSACryptoServiceProvider新版 .NET(.NET Core 2.0+ / .NET 5+)里 RSACryptoServiceProvider 已标记为过时,它依赖 Windows CryptoAPI,跨平台不兼容,且默认密钥大小受限(比如老版本只支持最多 16384 位但实际常卡在 4096)。直接用 RSA.Create() 是唯一推荐路径------它自动适配当前运行时的最优实现(Windows 上走 CNG,Linux/macOS 走 OpenSSL)。常见错误:硬编码 new RSACryptoServiceProvider(2048),跑在 Linux 容器里直接抛 PlatformNotSupportedException。RSA.Create(2048) 创建新密钥对;需要持久化时调用 ExportPkcs8PrivateKey()(私钥)或 ExportSubjectPublicKeyInfo()(公钥),二进制字节流,不是 PEM 字符串如果必须读 PEM 格式(如 OpenSSL 生成的 id_rsa.pub),得先用第三方库(如 BouncyCastle)转,.NET 原生不解析 PEM 封装密钥长度选 2048 足够多数场景;3072 更稳妥;4096 增加开销,加密/解密耗时明显上升(尤其服务端高频解密时)公钥加密必须用 Encrypt() + OAEP SHA256,别用 PKCS1PKCS1 填充模式已被证明存在 Bleichenbacher 攻击风险,.NET 默认仍保留但它不该出现在新代码里。OAEP 是唯一安全选择,且必须显式指定哈希算法------new RSAEncryptionPadding.OaepSHA256(),不能只写 RSAEncryptionPadding.Oaep(会默认用 SHA1,而 SHA1 已不安全)。典型翻车现场:传入 Encoding.UTF8.GetBytes("hello") 直接加密,结果解密失败------RSA 对明文长度敏感,2048 位密钥下 OAEP-SHA256 最多只能加密 190 字节左右数据。超长内容得先用 AES 加密,再用 RSA 加密 AES 密钥(即混合加密)。加密前务必检查明文长度:rsa.KeySize / 8 - 42(OAEP-SHA256)或 rsa.KeySize / 8 - 11(PKCS1,不推荐)公钥加密仅适合小数据(如会话密钥、token ID),绝不要拿来加密用户上传的 PDF 或 JSON解密方必须用同一私钥 + 同样填充方式,否则抛 CryptographicException:"The parameter is incorrect."签名用 SignData(),验签用 VerifyData(),别混淆加密和签名接口RSA 签名不是"用私钥加密",而是基于摘要的数学运算。SignData() 内部自动做哈希(如 SHA256)再签名,VerifyData() 自动复现同样哈希过程。手动先哈希再调 SignHash() 容易出错,且失去 .NET 对哈希算法绑定的保护。 Tellers AI Tellers是一款自动视频编辑工具,可以将文本、文章或故事转换为视频。

相关推荐
程序猿阿伟9 分钟前
《一套完整方法论:搞定图形应用的Docker镜像优化》
数据库·docker·容器
二等饼干~za89866818 分钟前
geo优化源码开发搭建技术分享
大数据·网络·数据库·人工智能·音视频
隐于花海,等待花开25 分钟前
16.Python 常用第三方库概览 深度解析
python
我材不敲代码26 分钟前
Python 函数核心:位置参数与关键字参数详解
java·前端·python
风落无尘29 分钟前
第十一章《对齐与安全》 完整学习资料
python·安全·机器学习
Kratzdisteln30 分钟前
【无标题】
前端·python
hakesashou35 分钟前
python文件操作需要导入模块吗
python
数据库小学妹36 分钟前
HTAP混合负载架构:如何用一个数据库同时搞定交易和分析
数据库·经验分享·架构·dba
wuxinyan12337 分钟前
工业级大模型学习之路029:解决双智能体调用数据库报错问题
数据库·人工智能·python·学习·智能体
SunnyDays101144 分钟前
Python操作Excel批注:从基础添加到高级自定义的完整指南
开发语言·python·excel