我创建了这个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,但错误仍然存在。
1条答案
按热度按时间ryhaxcpt1#
无论如何,我找到了一个解决方案here。解决方案是,我不得不用RSACng替换RSACryptoServiceProvider。现在它工作正常。
edit---正如Topaco提到的,它错误地使用了rsa而不是rsa 1。这个方法也可以工作。