Я смотрел на хороший пример на этой странице MSDN: http://msdn.microsoft.com/en-us/library/system.security.cryptography.x509certificates.x509certificate2.aspx
Прокрутите до половины пути к примеру и посмотрите на метод:
// Decrypt a file using a private key.
private static void DecryptFile(string inFile, RSACryptoServiceProvider rsaPrivateKey)
Вы заметитечитатель читает только 3 байта за раз, когда он пытается прочитать int из потока:
inFs.Seek(0, SeekOrigin.Begin);
inFs.Read(LenK, 0, 3);// <---- this should be 4
inFs.Seek(4, SeekOrigin.Begin);// <--- this line masks the bug for smaller ints
inFs.Read(LenIV, 0, 3); // <---- this should be 4
Поскольку следующая строка ищет позицию "4", ошибка маскируется.Правильно ли я понимаю или это намеренно, то есть какая-то странная оптимизация, поскольку мы знаем, что (для этого примера) длина ключа AES и IV будет достаточно мала, чтобы вместить ее в 3 байта, поэтому прочитайте только 3, а затем пропуститедо 4, таким образом сохранить чтение 1 байт с диска?
Если оптимизация .... Действительно ??