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

db2dz4w8  于 2023-04-22  发布在  .NET
关注(0)|答案(1)|浏览(373)

我创建了这个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,但错误仍然存在。

ryhaxcpt

ryhaxcpt1#

无论如何,我找到了一个解决方案here。解决方案是,我不得不用RSACng替换RSACryptoServiceProvider。现在它工作正常。
edit---正如Topaco提到的,它错误地使用了rsa而不是rsa 1。这个方法也可以工作。

相关问题