私はこのようにRSACryptoServiceProviderを使用しています...
private byte[] RSAEncrypt(byte[] DataToEncrypt, string ContainerName, bool DoOAEPPadding)
{
try
{
byte[] encryptedData;
// Create a new instance of CspParameters. Pass
// 13 to specify a DSA container or 1 to specify
// an RSA container. The default is 1.
CspParameters cspParams = new CspParameters();
// Specify the container name using the passed variable.
cspParams.KeyContainerName = ContainerName;
cspParams.Flags = CspProviderFlags.UseDefaultKeyContainer;
//Create a new instance of RSACryptoServiceProvider.
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(cspParams))
{
//Encrypt the passed byte array and specify OAEP padding.
//OAEP padding is only available on Microsoft Windows XP or
//later.
encryptedData = RSA.Encrypt(DataToEncrypt, DoOAEPPadding);
}
return encryptedData;
}
//Catch and display a CryptographicException
//to the console.
catch (CryptographicException ex)
{
sl.Write(ex, MessageType.Error);
throw;
}
}
次に、Outlook プラグイン Windows フォーム アプリケーションをオフにして、このコードを使用しているアプリケーションを再びオンにした後、データの暗号化を解除しようとしました。復号化コードは次のようになります...
private byte[] RSAEncrypt(byte[] DataToEncrypt, string ContainerName, bool DoOAEPPadding)
{
try
{
byte[] encryptedData;
// Create a new instance of CspParameters. Pass
// 13 to specify a DSA container or 1 to specify
// an RSA container. The default is 1.
CspParameters cspParams = new CspParameters();
// Specify the container name using the passed variable.
cspParams.KeyContainerName = ContainerName;
cspParams.Flags = CspProviderFlags.UseDefaultKeyContainer;
//Create a new instance of RSACryptoServiceProvider.
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(cspParams))
{
//Encrypt the passed byte array and specify OAEP padding.
//OAEP padding is only available on Microsoft Windows XP or
//later.
encryptedData = RSA.Encrypt(DataToEncrypt, DoOAEPPadding);
}
return encryptedData;
}
//Catch and display a CryptographicException
//to the console.
catch (CryptographicException ex)
{
sl.Write(ex, MessageType.Error);
throw;
}
}
指を置くことができない何かが現れるまで、うまく機能します。日付が変わったようなものかどうかはわかりません。データを復号化しようとすると、「不良データ」エラーが発生します。ここでも、一定の時間が経過するか、アプリをオフにするか、ユーザーがログオフするまで、うまく機能します。何が原因なのかわからず、特定できません。テキストファイルから暗号化されたデータを吹き飛ばし、それを再作成して復号化した瞬間、問題はありません。暗号化/ファイルへの保存とファイルからの読み取り/復号化の間にアプリケーションを再起動しても、うまく機能します! 何かが起こり、CspParameters の有効期限が切れる原因を理解するのに十分な KeyContainers を知りません。