Средства разработки приложений


Класс AcedMemoryWriter - часть 3


Шифрование данных выполняется методами классом AcedCast5. Но прежде, чем шифровать данные, для них вычисляется значение 20-байтной сигнатуры RipeMD-160, которое помещается в выходной массив вместе с данными и используется при последующем чтении из потока для проверки того, что данные в потоке расшифрованы с правильным ключом и что они не были повреждены.

Последовательность действий при вызове метода ToArray() класса AcedMemoryWriter следующая. Сначала выполняется упаковка данных классом AcedDeflator. Затем для полученного массива рассчитывается значение односторонней хеш-функции RipeMD-160 методами класса AcedRipeMD. Это значение помещается в выходной массив перед данными. Потом данные шифруются методами класса AcedCast5. Значение цифровой сигнатуры не шифруется. На заключительном этапе для всего содержимого выходного массива рассчитывается контрольная сумма Адлера вызовом метода AcedBinary.Adler32(), которая размещается в первых 4-х байтах выходного массива. Заполненный таким образом массив возвращается как результат функции ToArray(). В зависимости от параметров, могут опускаться этапы упаковки и/или расчета цифровой сигнатуры и шифрования данных.

Пример использования класса AcedMemoryWriter: private byte[] PutData() { AcedMemoryWriter w = new AcedMemoryWriter(); w.WriteByteArray(new byte[] {5, 6, 7, 8, 9}); w.WriteInt16(10000); int[] otherValues = new int[120]; for (int i = 0; i < 120; i += 3) { otherValues[i] = 1; otherValues[i + 1] = 2; otherValues[i + 2] = 3; } w.Write(otherValues, 10, 100); w.WriteString("Hello world!");
////////////////////////////////////////////////////// // Вариант 1: данные возвращаются как есть с // добавлением контрольной суммы Адлера. //////////////////////////////////////////////////////
return w.ToArray();
/* ////////////////////////////////////////////////////// // Вариант 2: данные сжимаются и защищаются // контрольной суммой Адлера. //////////////////////////////////////////////////////
return w.ToArray(AcedCompressionMode.Fast); */



Начало  Назад  Вперед



Книжный магазин