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是一款自动视频编辑工具,可以将文本、文章或故事转换为视频。

相关推荐
在世修行10 分钟前
智学文枢:变式题生成引擎
python·ai·pyside·题目生成
znnnk15 分钟前
数据库被AI“重写”:2026,从CPU中心走向GPU中心
数据库·人工智能·oracle
微微%38 分钟前
mysql的安装和使用
数据库·mysql·mysql8安装
On The Road :2 小时前
Java 多线程详解:从入门到线程安全
java·python·安全
软件派2 小时前
MiniMax M3.1 Flash 高频业务落地实战指南
大数据·数据库·人工智能
岁月宁静2 小时前
如何设计支持 Skills 的 Agent?一套可扩展的四层架构
python·agent
岁月宁静2 小时前
CrewAI 快速上手:10 分钟搭建你的第一个 Agent 团队
python·agent
云边云科技_云网融合3 小时前
连锁门店组网怎么做?SD-WAN 多分支组网的架构选型、部署与成本结构
服务器·数据库·php
曲径海盗3 小时前
【Python 学习第 40 天】for 循环
python·学习笔记·编程入门
泡海椒3 小时前
# 深度解析JQuick-SQL Join重排序与哈希连接执行机制
数据库·sql·哈希算法