Я хочу десериализовать зашифрованные объекты (несколько экземпляров одного и того же типа объекта) из файла, который был добавлен во время выполнения программы. Объекты были зашифрованы с использованием CryptoStream.
Однако при десериализации я не могу перебрать cryptoStream, как я и предполагал.
Я могу сериализовать и шифровать объекты, и файл увеличивается с каждым добавленным объектом.
Я также могу десериализовать первый зашифрованный объект. Тем не менее, следующие объекты не могут быть восстановлены.
Я пробовал разные подходы к циклу через поток. Также я пробовал другие криптопотоки и обходил эту проблему.
Сериализация:
private void EncryptObjectToFile(TraceMessage pMessage, FileInfo pFileInfo)
{
if (pFileInfo == null) { pFileInfo = m_LogFile; }
m_Formatter.Serialize(m_SerializedStream, pMessage);
m_SerializedStream.Position = 0;
using (FileStream logfile = new FileStream(m_LogFile.FullName, FileMode.Append))
{
using (CryptoStream cryptoStream = new CryptoStream(logfile, m_Algorythm.CreateEncryptor(key, iv), CryptoStreamMode.Write))
{
cryptoStream.Write(m_SerializedStream.ToArray(), 0, (int)m_SerializedStream.Length);
cryptoStream.FlushFinalBlock();
}
}
}
десериализация:
private List<TraceMessage> DecryptObjectsFromFile(FileInfo pFileInfo)
{
List<TraceMessage> tmp = new List<TraceMessage>();
try
{
READWRITELOCK.AcquireReaderLock(READERTIMEOUTS);
Interlocked.Increment(ref READS);
try
{
if (pFileInfo == null) { pFileInfo = m_LogFile; }
m_SerializedStream.Position = 0;
using (FileStream logfile = new FileStream(m_LogFile.FullName, FileMode.Open))
{
using (var cryptoStream = new CryptoStream(logfile, m_Algorythm.CreateDecryptor(key, iv), CryptoStreamMode.Read))
{
if (cryptoStream.CanRead)
{
while (cryptoStream.Position < cryptoStream.Length)
{
tmp.Add((TraceMessage)m_Formatter.Deserialize(cryptoStream));
}
}
}
}
}
catch(Exception exp) { }
finally
{
READWRITELOCK.ReleaseReaderLock();
Interlocked.Decrement(ref READS);
}
}
catch (Exception) { }
return tmp;
}
В конце концов я пытаюсь зашифровать объекты (несколько экземпляров одного и того же типа) и добавить их в файл. Поскольку файлы могут быть добавлены в любое время и не могут быть собраны в список, а затем записаны в файл, я хочу добавить эти объекты в уже существующий файл.
Позже я хочу воссоздать каждый объект, который был зашифрован и сериализован в файл.