Я использую локальное шифрование в рамках существующей программы управления файлами.
Большая часть примера кода, который я могу найти, например, Microsoft , демонстрирует, как писать напрямую в файл, но мне нужно предоставить поток, который используется в другом месте вprogram:
CryptoStream GetEncryptStream(string filename)
{
var rjndl = new RijndaelManaged();
rjndl.KeySize = 256;
rjndl.BlockSize = 256;
rjndl.Mode = CipherMode.CBC;
rjndl.Padding = PaddingMode.PKCS7;
// Open read stream of unencrypted source fileStream:
var fileStream = new FileStream(filename, FileMode.Open);
/* Get key and iv */
var transform = rjndl.CreateEncryptor(key, iv);
// CryptoStream in *read* mode:
var cryptoStream = new CryptoStream(fileStream, transform, CryptoStreamMode.Read);
/* What can I do here to insert the unencrypted IV at the start of the
stream so that the first X bytes returned by cryptoStream.Read are
the IV, before the bytes of the encrypted file are returned? */
return cryptoStream; // Return CryptoStream to be consumed elsewhere
}
Моя проблема описана в комментарии к последней строке, но одна: как я могу добавить IV к началу CryptoStream таким образом, чтобы это были первые X байтов, возвращенных при CryptoStreamчитается, учитывая, что контроль того, когда фактически начинать чтение потока и запись в файл, выходит за рамки моего кода?