我試圖從密鑰容器訪問私鑰,然後使用它來解密先前加密的字節[]消息。我的代碼似乎能夠說的byte []加密的,但是當我嘗試解密它,我得到以下信息:當我嘗試從密鑰容器訪問私鑰時拋出異常
型「System.ObjectDisposedException」未處理的異常出現在mscorlib.dll
我在Visual Studios中使用C#。 我的主要功能如下:
try
{
string testValue = "TestKeyContainer";
string message = "This is the test message!";
UnicodeEncoding ByteConverter = new UnicodeEncoding();
byte[] originalData = ByteConverter.GetBytes(message);
byte[] encryptedData;
byte[] decryptedData;
RSACryptoServiceProvider rsa = null;
//Create a public-private key pair and store them in a key container.
MakeAndSaveKey(testValue);
//[Attempt to] retrieve the key from the container
rsa = GetKeyFromContainer(testValue);
//Read message
Console.WriteLine("Reading the test message... *ahem*...\n{0}", ByteConverter.GetString(originalData));
//Encrypt, then read message
encryptedData = encrypt(originalData, rsa);
Console.WriteLine("Reading the encrypted message...\n....\n{0}", ByteConverter.GetString(encryptedData));
//Decrypt, then read message
decryptedData = decrypt(encryptedData, rsa);
Console.WriteLine("Reading the decrypted message...\n{0}", ByteConverter.GetString(decryptedData));
//Delete key from the container
//DeleteKey("TestKeyContainer");
}
catch (CryptographicException e)
{
Console.WriteLine(e.Message);
}
DELETEKEY(串)是未完成的,因而註釋掉。代碼MakeAndSaveKey(字符串)是:
private static void MakeAndSaveKey(string containerName)
{
CspParameters cp = new CspParameters();
cp.KeyContainerName = containerName;
CspParameters cp = new CspParameters();
cp.KeyContainerName = containerName;
return;
}
GetKeyFromContainer(字符串)是:
private static RSACryptoServiceProvider GetKeyFromContainer(string containerName)
{
CspParameters cp = new CspParameters();
cp.KeyContainerName = containerName;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cp);
return rsa;
}
應當指出的是,MakeAndSaveKey和GetKeyFromContainer字面上的微軟的代碼從他們How to: Store Asymmetric Keys in a Key Container只是一個C#轉換。
用於加密的代碼(字節[],的RSACryptoServiceProvider)是:
private static byte[] encrypt(byte[] message, RSACryptoServiceProvider rsa)
{
using (rsa)
{
message = RSAEncrypt(message, rsa.ExportParameters(false), false);
}
return message;
}
而對於解密(字節[],的RSACryptoServiceProvider):
private static byte[] decrypt(byte[] message, RSACryptoServiceProvider rsa)
{
using (rsa)
{
try
{
message = RSADecrypt(message, rsa.ExportParameters(true), false);
}
catch (CryptographicException e)
{
Console.WriteLine("Couldn't decrypt the message. \n:ERROR: {0}", e.Message);
}
}
return message;
}
該程序輸出它檔之前以下:
閱讀測試信息... ahem ...
這是測試消息!
讀取加密的消息...
....
??????????????????????????ü ????????????????? = ?????????小號??????? H +
,除了'='有三條線而不是兩條。我只是不知道在哪裏可以找到那個符號。
之後,我得到了這篇文章頂部描述的異常。具體而言,它指向
message = RSADecrypt(message, rsa.ExportParameters(true), false);
來自decrypt(byte [],RSACryptoServiceProvider)的定義。有人知道這是爲什麼發生,或者如何解決它?
看來你正在對通過參數給出的對象執行「使用(rsa)」,這可能是原因。只有最初構造這個對象的方法/對象應該處理它。 –