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

相关推荐
金銀銅鐵3 小时前
[Python] 从《千字文》中随机挑选汉字
后端·python
cup118 小时前
[技术复盘] Windows Python 打包实战:Nuitka 环境踩坑总结与 CI 自动化构建全指南
python·ai·环境变量·ci·nuitka·skill
aqi0010 小时前
15天学会AI应用开发(七)有了大模型为什么还要引入RAG
人工智能·python·大模型·ai编程·ai应用
金銀銅鐵12 小时前
用 Python 实现 Take-Away 游戏
python·游戏
copyer_xyf13 小时前
Agent 流程编排
后端·python·agent
copyer_xyf13 小时前
Agent RAG
后端·python·agent
copyer_xyf13 小时前
【RAG】向量数据库:milvus
后端·python·agent
copyer_xyf13 小时前
Agent 记忆管理
后端·python·agent
星云穿梭1 天前
用Python写一个带图形界面的学生管理系统——完整教程
python