在 C# .Net RSA 应用程序中解码 OAEP 填充时发生错误

问题描述 投票:0回答:1

我创建了这个 C# .Net Framework 4.7 控制台应用程序来测试使用 RSA 加密和解密文本文件。我创建了一对密钥并将它们导出到 xml 文件,然后将它们导入以解密文件 但为什么这会产生填充错误?

System.Security.Cryptography.CryptographicException:“解码 OAEP 填充时出错。”

这是我的代码

static void Main(string[] args)
{
    // Generate a new RSA key pair
    RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

    // Export the public key to an XML file
    string publicKeyXml = rsa.ToXmlString(false);
    File.WriteAllText("public_key.xml", publicKeyXml);

    // Export the private key to an XML file
    string privateKeyXml = rsa.ToXmlString(true);
    File.WriteAllText("private_key.xml", privateKeyXml);


    // Encrypt the contents of the input file
    string inputFileName = "input.txt";
    string outputFileName = "output.txt";
    byte[] inputBytes = File.ReadAllBytes(inputFileName);
    byte[] encryptedBytes = rsa.Encrypt(inputBytes, true);
    File.WriteAllBytes(outputFileName, encryptedBytes);

    // Load the RSA public key from an XML file
    RSACryptoServiceProvider rsa1 = new RSACryptoServiceProvider();
    string publicKeyXml1 = File.ReadAllText("public_key.xml");
    rsa.FromXmlString(publicKeyXml1);

    // Load the RSA private key from an XML file
    string privateKeyXml1 = File.ReadAllText("private_key.xml");
    rsa.FromXmlString(privateKeyXml1);

    // Decrypt the contents of the output file
    byte[] read = File.ReadAllBytes("output.txt");
    byte[] decryptedBytes = rsa1.Decrypt(encryptedBytes, true);
    string decryptedText = Encoding.UTF8.GetString(decryptedBytes);
    Console.WriteLine(decryptedText);
}

我尝试将填充模式更改为 PKCS#1 v1.5,但错误仍然存在。

c# .net encryption cryptography rsa
1个回答
0
投票

无论如何我在这里找到了解决方案。解决方案是我必须用 RSACng 替换 RSACryptoServiceProvider。现在它工作正常。

编辑--- 正如 Topaco 提到的,它错误地使用了 rsa 而不是 rsa1。该方法也有效。

© www.soinside.com 2019 - 2024. All rights reserved.