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

C# .NET Framework RSA解密出现OAEP填充解码错误求助

问题原因及解决方法

你的代码核心问题是密钥对象的使用完全混乱,导致解密时用了错误的密钥,从而触发OAEP填充解码失败的错误——哪怕换PKCS#1 v1.5填充也没用,因为密钥不匹配的根本问题没解决。

具体错误点分析

  • 你创建了新的rsa1对象,但导入公钥和私钥时,却一直操作原来的rsa对象:
    // 错误地给原rsa对象导入公钥,rsa1完全没被赋值
    rsa.FromXmlString(publicKeyXml1);
    // 还是给原rsa对象导入私钥,rsa1依然是默认生成的全新密钥对
    rsa.FromXmlString(privateKeyXml1);
    
    最终解密时用的rsa1,是一个和加密密钥毫无关系的全新密钥对象,用它解密自然会失败。
  • 额外冗余:你读取了output.txt到read变量,但解密时用的是内存里的encryptedBytes,代码逻辑冗余。
  • 潜在风险:RSA加密有明文长度限制(OAEP填充下,最大明文长度为密钥字节数-42,比如2048位密钥最多加密214字节),如果input.txt内容过长,直接调用Encrypt会抛出其他错误,正确做法是用RSA加密对称密钥(如AES),再用对称加密处理大文件。

修正后的代码

static void Main(string[] args)
{
    // 生成RSA密钥对并导出到文件
    using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
    {
        string publicKeyXml = rsa.ToXmlString(false);
        File.WriteAllText("public_key.xml", publicKeyXml);

        string privateKeyXml = rsa.ToXmlString(true);
        File.WriteAllText("private_key.xml", privateKeyXml);

        // 加密输入文件内容
        string inputFileName = "input.txt";
        string outputFileName = "output.txt";
        byte[] inputBytes = File.ReadAllBytes(inputFileName);
        // 注意:若inputBytes长度超过RSA限制,需改用对称加密+RSA加密密钥的方案
        byte[] encryptedBytes = rsa.Encrypt(inputBytes, true);
        File.WriteAllBytes(outputFileName, encryptedBytes);
    }

    // 使用导入的私钥解密
    using (RSACryptoServiceProvider rsaDecrypt = new RSACryptoServiceProvider())
    {
        string privateKeyXml = File.ReadAllText("private_key.xml");
        rsaDecrypt.FromXmlString(privateKeyXml);

        byte[] encryptedBytes = File.ReadAllBytes("output.txt");
        byte[] decryptedBytes = rsaDecrypt.Decrypt(encryptedBytes, true);
        string decryptedText = Encoding.UTF8.GetString(decryptedBytes);
        Console.WriteLine(decryptedText);
    }
}

关键修正点

  1. 用using语句管理RSACryptoServiceProvider对象,确保资源正确释放。
  2. 解密时单独创建新的RSA对象,并正确导入之前导出的私钥。
  3. 直接读取加密后的文件内容进行解密,逻辑更清晰。

内容的提问来源于stack exchange,提问作者Vidarshana Dissanayaka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 09:52:41