如何在.NET Core中创建基于RSAPSS算法的RSA实例?
问题根因
RSA.Create(string algorithm)方法的入参是基础加密算法标识符,RSAPSS并非独立的RSA算法类型,而是RSA算法的签名填充模式。.NET Framework对RSAPSS这个算法名做了特殊兼容映射,所以可以正常返回实例;但.NET Core/.NET 5重构了加密层后,移除了这个非标准的映射规则,所以传入RSAPSS会直接返回null。
可行解决方案
无需特殊指定算法名创建实例,所有.NET Core/.NET 5+的默认RSA实现都原生支持PSS填充,仅需在签名、验签环节指定填充模式即可:
- 第一步:创建普通RSA实例(Windows、Linux跨平台兼容)
// 直接创建默认RSA实例即可,不需要传参数指定RSAPSS var rsa = RSA.Create(2048);
- 第二步:签名/验签时指定PSS填充
// 签名示例 byte[] data = new byte[] { 1,2,3,4,5 }; byte[] signature = rsa.SignData( data, HashAlgorithmName.SHA256, RSASignaturePadding.Pss); // 验签示例 bool isValid = rsa.VerifyData( data, signature, HashAlgorithmName.SHA256, RSASignaturePadding.Pss);
- 如果你仅需要在Windows环境运行,也可以直接实例化RSACng,本身支持PSS填充:
var rsa = new RSACng(2048);
疑问澄清
官方文档描述的Windows、Linux均支持PSS填充是完全准确的,该能力和RSA实例的创建方式无关,仅需在调用签名/验签方法时指定RSASignaturePadding.Pss参数即可生效,不需要在创建实例阶段做特殊配置。
内容的提问来源于stack exchange,提问作者Selman Genç
相关产品推荐
相关产品推荐

