わかりました、しばらくの間ファイルの暗号化と復号化を試みていましたが、この例外が発生し続けています
System.Security.Cryptography.CryptographicException: パラメーターが正しくありません。
ファイルは完全に書き込まれ、バイト配列には実際に正当なエントリがあります。しかし、復号化しようとすると、これはまだスローされます。
そして、ここに関数全体があります:
private static void loadTimes()
{
try
{
short[] encShorts = new short[bestTimes.Length / 2];
IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();
IsolatedStorageFileStream stream = new IsolatedStorageFileStream("test.txt", FileMode.Open, FileAccess.ReadWrite, store);
StreamReader stmReader = new StreamReader(stream);
int i = 0;
while (!stmReader.EndOfStream)
{
encShorts[i] = short.Parse(stmReader.ReadLine());
i++;
}
stmReader.Close();
byte[] encBytes = new byte[bestTimes.Length];
for (int j = 0; j < encShorts.Length; j++)
{
encBytes[j * 2] = (byte)(encShorts[j] / 256);
encBytes[j * 2 + 1] = (byte)(encShorts[j] % 256);
}
bestTimes = ProtectedData.Unprotect(encBytes, null);
checkForTimeAds();
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}
基本的には、ゲームで最高のタイム スコアを取得するためにファイルから読み込みます。これらはショーツなので、それぞれを 2 つのビットに分割します。
次のコードは例外をスローします。
bestTimes = ProtectedData.Unprotect(encBytes, null);
私はいたるところを見てきましたが、多くの人が解決していないようで、「競合状態」について言う人もいますが、それがここに当てはまるかどうかは完全にはわかりません. なぜこの例外が発生するのですか?
Jon Skeet から要求された Saving コード:
private static void saveTimes()
{
try
{
byte[] encResult = ProtectedData.Protect(bestTimes, null);
short[] encShorts = new short[bestTimes.Length / 2];
for (int i = 0; i < encShorts.Length; i++)
{
encShorts[i] = (short) (encResult[i] * 256 + encResult[i + 1]);
}
IsolatedStorageFile store = System.IO.IsolatedStorage.IsolatedStorageFile.GetUserStoreForApplication();
IsolatedStorageFileStream stream = new IsolatedStorageFileStream("test.txt", FileMode.Create, FileAccess.Write, store);
StreamWriter writer = new StreamWriter(stream);
foreach (short part in encShorts)
{
writer.WriteLine(part);
}
writer.Close();
}
catch (Exception)
{
MessageBox.Show("Couldn't save the file.");
}
checkForTimeAds();
}