Абстрактный базовый класс для всех реализаций симметричного шифрования по ГОСТ 28147.

Пространство имен:  CryptoPro.Sharpei
Сборка:  CryptoPro.Sharpei.Base (в CryptoPro.Sharpei.Base.dll)

Синтаксис

Visual Basic
<ComVisibleAttribute(True)> _
Public MustInherit Class Gost28147 _
	Inherits SymmetricAlgorithm
C#
[ComVisibleAttribute(true)]
public abstract class Gost28147 : SymmetricAlgorithm
Visual C++
[ComVisibleAttribute(true)]
public ref class Gost28147 abstract : public SymmetricAlgorithm
JavaScript
CryptoPro.Sharpei.Gost28147 = function();

Type.createClass(
	'CryptoPro.Sharpei.Gost28147',
	SymmetricAlgorithm);

Заметки

Алгоритм ГОСТ 28147 поддерживает ключи длинной 256 бит.

Для использования алгоритма ГОСТ 28147 в части вычисления имитовставки см. Gost28147Imit.

Примеры

Пример зашифрования и расшифрования файла при помощи порожденного класса Gost28147CryptoServiceProvider.
C# Copy imageCopy Code
using System;
using System.IO;
using System.Security.Cryptography;

using CryptoPro.Sharpei;

namespace Samples.Encrypt
{
    class EncryptDecryptRandomFile
    {
        static void Main(string[] args)
        {
            // Создаем CSP, генерируем ключ и синхропосылку.
            Gost28147 gost = new Gost28147CryptoServiceProvider();
            gost.GenerateIV();
            gost.GenerateKey();

            Encrypt("test.txt", "test.enc", gost);
            Decrypt("test.enc", "test.dec", gost);
        }

        static void Encrypt(string inFileName, string outFileName, 
            SymmetricAlgorithm gost)
        {
            //Создаем потоки для входного и выходного файлов.
            byte[] bin = new byte[100];  // Промежуточный буфер.
            long rdlen = 0;              // Общее число записанных байт.

            FileStream fin = new FileStream(inFileName, FileMode.Open, FileAccess.Read);
            FileStream fout = new FileStream(outFileName, FileMode.OpenOrCreate, FileAccess.Write);
            fout.SetLength(0);

            long totlen = fin.Length;    // Общий размер входного файла.
            int len;                     // Число считанных за один раз байт.

            // Создаем криптопоток для записи
            CryptoStream encStream = new CryptoStream(fout, gost.CreateEncryptor(), 
                CryptoStreamMode.Write);

            Console.WriteLine("Зашифрование...");

            // Читаем из входного файла, шифруем и пишем в выходной.
            while (rdlen < totlen)
            {
                len = fin.Read(bin, 0, 100);
                encStream.Write(bin, 0, len);
                rdlen = rdlen + len;
                Console.WriteLine("обработано {0} байтов", rdlen);
            }

            encStream.Close();
            fout.Close();
            fin.Close();
        }

        static void Decrypt(string inFileName, string outFileName,
            SymmetricAlgorithm gost)
        {
            // Создаем потоки для входного и выходного файлов.
            byte[] bin = new byte[100];  // Промежуточный буфер.
            long rdlen = 0;              // Общее число записанных байт.

            FileStream fin = new FileStream(inFileName, FileMode.Open, FileAccess.Read);
            FileStream fout = new FileStream(outFileName, FileMode.OpenOrCreate, FileAccess.Write);
            fout.SetLength(0);

            long totlen = fin.Length;    // Общий размер входного файла.
            int len;                     // Число считанных за один раз байт.

            // Создаем криптопоток для записи
            CryptoStream encStream = new CryptoStream(fout, gost.CreateDecryptor(),
                CryptoStreamMode.Write);

            Console.WriteLine("Расшифрование...");

            // Читаем из входного файла, расшифровываем и пишем в выходной.
            while (rdlen < totlen)
            {
                len = fin.Read(bin, 0, 100);
                encStream.Write(bin, 0, len);
                rdlen = rdlen + len;
                Console.WriteLine("обработано {0} байтов", rdlen);
            }

            encStream.Close();
            fout.Close();
            fin.Close();
        }
    }
}

Иерархия наследования

System..::..Object
  SymmetricAlgorithm
    CryptoPro.Sharpei..::..Gost28147
      CryptoPro.Sharpei..::..Gost28147CryptoServiceProvider

Потокобезопасность

Любые открытые члены этого типа, объявленные как static (Shared в Visual Basic), являются потокобезопасными. Потокобезопасность членов экземпляров не гарантирована.

См. также: