Esempio n. 1
0
        private static Stream CreateImitDataStream(Gost28147SymmetricAlgorithmBase sharedKey, Stream dataStream)
        {
            // Создание объекта для вычисления имитовставки
            using (var imitHash = new Gost28147ImitHashAlgorithm(sharedKey))
            {
                // Вычисление имитовставки для потока данных
                var imitHashValue = imitHash.ComputeHash(dataStream);

                // Запись имитовставки в начало выходного потока данных
                var imitDataStream = new MemoryStream();
                imitDataStream.Write(imitHashValue, 0, imitHashValue.Length);

                // Копирование исходного потока данных в выходной поток
                dataStream.Position = 0;
                dataStream.CopyTo(imitDataStream);

                imitDataStream.Position = 0;

                return imitDataStream;
            }
        }
Esempio n. 2
0
        private static bool VerifyImitDataStream(Gost28147SymmetricAlgorithmBase sharedKey, Stream imitDataStream)
        {
            // Создание объекта для вычисления имитовставки
            using (var imitHash = new Gost28147ImitHashAlgorithm(sharedKey))
            {
                // Считывание имитовставки из потока данных
                var imitHashValue = new byte[imitHash.HashSize / 8];
                imitDataStream.Read(imitHashValue, 0, imitHashValue.Length);

                // Вычисление реального значения имитовставки для потока данных
                var expectedImitHashValue = imitHash.ComputeHash(imitDataStream);

                // Сравнение исходной имитовствки с ожидаемой
                return imitHashValue.SequenceEqual(expectedImitHashValue);
            }
        }