Ejemplo n.º 1
0
        /// <summary>
        /// Получить дешифрованные данные из потока файла MCDF.
        /// </summary>
        /// <param name="stream">Поток файла MCDF</param>
        /// <param name="diskKey">Ключ</param>
        /// <param name="diskTable">Таблица</param>
        /// <returns></returns>
        public static byte[] DecryptStream(CFStream stream, byte[] diskKey, byte[] diskTable)
        {
            int count = (int)stream.Size - 8;

            byte[] resData = stream.GetData(0, ref count);
            count = 8;
            byte[] synchro = stream.GetData(stream.Size - 8, ref count);
            resData = Mathdll.GostGamma(resData, diskKey, diskTable, synchro);
            return(resData);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// Поместить данные в указанный поток
 /// </summary>
 /// <param name="stream">Поток для загрузки данных</param>
 /// <param name="data">Данные, которые необходимо зашифровать и поместить</param>
 /// <param name="diskKey">Ключ</param>
 /// <param name="diskTable">Таблица</param>
 private static void SetDataToStream(CFStream stream, byte[] data, byte[] diskKey, byte[] diskTable)
 {
     // сгенеррировать синхропосылку
     byte[] synchroArr = GenerateSynchro();
     // зашифровать данные
     byte[] cryptData = Mathdll.GostGamma(data, diskKey, diskTable, synchroArr);
     // создать буффер для объединения зашифрованных данных и синхропосылки
     byte[] buffer = new byte[data.Length + synchroArr.Length];
     Array.Copy(cryptData, 0, buffer, 0, cryptData.Length);
     Array.Copy(synchroArr, 0, buffer, cryptData.Length, synchroArr.Length);
     // записать данные в поток
     stream.SetData(buffer);
 }