You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用RSACryptoServiceProvider进行RSA3072_RSASSA-PSS签名报错

解决RSA RSASSA-PSS签名报错问题

问题原因

RSACryptoServiceProvider是基于传统Windows CryptoAPI的实现,不支持RSASSA-PSS签名填充模式,仅兼容PKCS#1 v1.5填充,这就是调用SignData传入RSASignaturePadding.Pss时抛出异常的核心原因。

解决方案

改用.NET官方推荐的RSA基类(.NET Framework 4.6+、.NET Core/.NET 5+均支持),它原生支持RSASSA-PSS签名方案。

1. 修改密钥生成代码

替换RSACryptoServiceProvider为RSA.Create,生成的密钥XML格式与原代码完全兼容,无需调整存储逻辑:

void GenerateKeys()
{
    using (var rsa = RSA.Create(3072))
    {
        // 获取私钥和公钥
        var publicKey = rsa.ToXmlString(false);
        var privateKey = rsa.ToXmlString(true);

        // 保存到磁盘(路径按需调整)
        string savePath = @"C:\Users\pkean\source\repos\ConsoleApp1\ConsoleApp1";
        File.WriteAllText(Path.Combine(savePath, "publickey.xml"), publicKey);
        File.WriteAllText(Path.Combine(savePath, "privateKey.xml"), privateKey);
    }
}

2. 修改签名代码

同样使用RSA类加载密钥,调用支持PSS填充的SignData重载完成签名:

byte[] content = new byte[2] { 0x12, 0x34 };

string readoutprivateXmlKey;
string keyPath = @"C:\Users\pkean\source\repos\ConsoleApp1\ConsoleApp1";
readoutprivateXmlKey = File.ReadAllText(Path.Combine(keyPath, "privateKey.xml"));

var signature = SignData(readoutprivateXmlKey, content);

byte[] SignData(string privatekey, byte[] data)
{
    using (var rsa = RSA.Create())
    {
        rsa.FromXmlString(privatekey);
        
        // 使用RSASSA-PSS(SHA256哈希 + PSS填充)签名
        return rsa.SignData(
            data,
            HashAlgorithmName.SHA256,
            RSASignaturePadding.Pss
        );
    }
}

补充说明

  • 若需验证PSS签名,验证代码同样要使用RSA类,调用VerifyData并传入RSASignaturePadding.Pss参数。
  • 原代码中byteSignusehash对应的sha256hash变量未定义,若需直接对哈希值签名,需先计算数据的SHA256哈希:
    byte[] sha256hash = SHA256.HashData(data);
    byte[] byteSignusehash = rsa.SignHash(
        sha256hash,
        HashAlgorithmName.SHA256,
        RSASignaturePadding.Pss
    );
    

内容的提问来源于stack exchange,提问作者i'm pk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:31:03