Абстрактный базовый класс для всех реализаций симметричного
шифрования по ГОСТ 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 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
SymmetricAlgorithm
CryptoPro.Sharpei..::..Gost28147
CryptoPro.Sharpei..::..Gost28147CryptoServiceProvider
Потокобезопасность
Любые открытые члены этого типа, объявленные как static (Shared в Visual Basic), являются потокобезопасными. Потокобезопасность членов экземпляров не гарантирована.