Прочитать на английском

Поделиться через


SymmetricAlgorithm Класс

Определение

Представляет абстрактный базовый класс, от которого наследуются все реализации алгоритмов симметричного шифрования.

C#
public abstract class SymmetricAlgorithm : IDisposable
C#
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class SymmetricAlgorithm : IDisposable
Наследование
SymmetricAlgorithm
Производный
Атрибуты
Реализации

Примеры

В следующем примере кода используется Aes класс с указанным Key свойством и вектором инициализации (IV) для шифрования файла, указанного параметром inName, и выводит зашифрованный результат в файл, указанный параметром outName. Параметры desKey и desIV для метода представляют собой 8-байтовые массивы. Для выполнения этого примера необходимо установить пакет высокого уровня шифрования.

C#
private static void EncryptData(string inName, string outName, byte[] aesKey, byte[] aesIV)
 {
     //Create the file streams to handle the input and output files.
     FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);
     FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);
     fout.SetLength(0);

     //Create variables to help with read and write.
     byte[] bin = new byte[100]; //This is intermediate storage for the encryption.
     long rdlen = 0;              //This is the total number of bytes written.
     long totlen = fin.Length;    //This is the total length of the input file.
     int len;                     //This is the number of bytes to be written at a time.

     Aes aes = Aes.Create();
     CryptoStream encStream = new CryptoStream(fout, aes.CreateEncryptor(aesKey, aesIV), CryptoStreamMode.Write);

     Console.WriteLine("Encrypting...");

     //Read from the input file, then encrypt and write to the output file.
     while(rdlen < totlen)
     {
         len = fin.Read(bin, 0, 100);
         encStream.Write(bin, 0, len);
         rdlen = rdlen + len;
         Console.WriteLine("{0} bytes processed", rdlen);
     }

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

Комментарии

Классы, производные от класса , SymmetricAlgorithm используют режим цепочки, называемый цепочкой блоков шифров (CBC), который требует ключа (Key) и вектора инициализации (IV) для выполнения криптографических преобразований данных. Чтобы расшифровать данные, зашифрованные с помощью одного из SymmetricAlgorithm классов , необходимо задать Key для свойства и IV свойства те же значения, которые использовались для шифрования. Чтобы симметричный алгоритм был полезен, секретный ключ должен быть известен только отправителю и получателю.

Aes, DES, RC2и TripleDES являются реализациями симметричного алгоритма.

Обратите внимание, что при использовании производных классов недостаточно с точки зрения безопасности просто принудительной сборки мусора после завершения использования объекта . Необходимо явным образом вызвать Clear метод объекта , чтобы обнулить все конфиденциальные данные в объекте, прежде чем он будет освобожден. Обратите внимание, что сборка мусора не обнуляет содержимое собранных объектов, а просто помечает память как доступную для перераспределения. Таким образом, данные, содержащиеся в объекте сборки мусора, могут по-прежнему присутствовать в куче памяти в нераспределенной памяти. В случае криптографических объектов эти данные могут содержать конфиденциальную информацию, например ключевые данные или блок обычного текста.

Все криптографические классы в .NET Framework, которые содержат конфиденциальные Clear данные, реализуют метод . При вызове Clear метод перезаписывает все конфиденциальные данные в объекте нулями, а затем освобождает объект, чтобы его можно было безопасно собрать. После обнуления и освобождения объекта необходимо вызвать Dispose метод с параметром disposing , для которого задано значение True , чтобы удалить все управляемые и неуправляемые ресурсы, связанные с объектом .

Примечания для тех, кто реализует этот метод

При наследовании от SymmetricAlgorithm класса необходимо переопределить следующие члены: CreateDecryptor(Byte[], Byte[]), CreateEncryptor(Byte[], Byte[]), GenerateIV()и GenerateKey().

Конструкторы

SymmetricAlgorithm()

Инициализирует новый экземпляр класса SymmetricAlgorithm.

Поля

BlockSizeValue

Представляет размер блока криптографической операции (в битах).

FeedbackSizeValue

Представляет размер порции данных обратной связи для криптографической операции (в битах).

IVValue

Представляет вектор инициализации (IV) для алгоритма симметричного шифрования.

KeySizeValue

Представляет размер секретного ключа (в битах), используемого алгоритмом симметричного шифрования.

KeyValue

Представляет секретный ключ для алгоритма симметричного шифрования.

LegalBlockSizesValue

Задает размеры блоков (в битах), которые поддерживаются алгоритмом симметричного шифрования.

LegalKeySizesValue

Задает размеры ключа (в битах), которые поддерживаются алгоритмом симметричного шифрования.

ModeValue

Представляет режим шифрования, используемый в алгоритме симметричного шифрования.

PaddingValue

Представляет режим заполнения, используемый в алгоритме симметричного шифрования.

Свойства

BlockSize

Возвращает или задает размер блока криптографической операции (в битах).

FeedbackSize

Возвращает или задает размер ответа криптографической операции (в битах) для режимов шифрования "Обратная связь по шифру" (CFB) и "Выходная обратная связь" (OFB).

IV

Получает или задает вектор инициализации (IV) для алгоритма симметричного шифрования.

Key

Получает или задает секретный ключ для алгоритма симметричного шифрования.

KeySize

Получает или задает размер секретного ключа (в битах), используемого алгоритмом симметричного шифрования.

LegalBlockSizes

Получает размеры блоков (в битах), которые поддерживаются алгоритмом симметричного шифрования.

LegalKeySizes

Возвращает размеры ключа (в битах), которые поддерживаются симметричным алгоритмом.

Mode

Возвращает или задает режим функционирования симметричного алгоритма.

Padding

Возвращает или задает режим заполнения, используемый в симметричном алгоритме.

Методы

Clear()

Освобождает все ресурсы, используемые классом SymmetricAlgorithm.

Create()
Устаревшие..
Устаревшие..

Создает криптографический объект по умолчанию, используемый для выполнения алгоритма симметричного шифрования.

Create(String)
Устаревшие..

Создает заданный криптографический объект, используемый для выполнения алгоритма симметричного шифрования.

CreateDecryptor()

Создает симметричный объект-дешифратор с текущим свойством Key и вектором инициализации (IV).

CreateDecryptor(Byte[], Byte[])

При переопределении в производном классе создает объект-дешифратор для алгоритма симметричного шифрования с заданным свойством Key и вектором инициализации (IV).

CreateEncryptor()

Создает симметричный объект-шифратор с текущим свойством Key и вектором инициализации (IV).

CreateEncryptor(Byte[], Byte[])

При переопределении в производном классе создает объект-шифратор для алгоритма симметричного шифрования с заданным свойством Key и вектором инициализации (IV).

DecryptCbc(Byte[], Byte[], PaddingMode)

Расшифровывает данные с помощью режима CBC с указанным режимом заполнения.

DecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode)

Расшифровывает данные с помощью режима CBC с указанным режимом заполнения.

DecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode)

Расшифровывает данные в указанный буфер, используя режим CBC с указанным режимом заполнения.

DecryptCfb(Byte[], Byte[], PaddingMode, Int32)

Расшифровывает данные с помощью режима CFB с указанным режимом заполнения и размером обратной связи.

DecryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode, Int32)

Расшифровывает данные с помощью режима CFB с указанным режимом заполнения и размером обратной связи.

DecryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

Расшифровывает данные в указанный буфер, используя режим CFB с указанным режимом заполнения и размером обратной связи.

DecryptEcb(Byte[], PaddingMode)

Расшифровывает данные с помощью режима ECB с указанным режимом заполнения.

DecryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Расшифровывает данные с помощью режима ECB с указанным режимом заполнения.

DecryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode)

Расшифровывает данные в указанный буфер, используя режим ECB с указанным режимом заполнения.

Dispose()

Освобождает все ресурсы, используемые текущим экземпляром класса SymmetricAlgorithm.

Dispose(Boolean)

Освобождает неуправляемые ресурсы, используемые объектом SymmetricAlgorithm, а при необходимости освобождает также управляемые ресурсы.

EncryptCbc(Byte[], Byte[], PaddingMode)

Шифрует данные с помощью режима CBC с указанным режимом заполнения.

EncryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode)

Шифрует данные с помощью режима CBC с указанным режимом заполнения.

EncryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode)

Шифрует данные в указанный буфер, используя режим CBC с указанным режимом заполнения.

EncryptCfb(Byte[], Byte[], PaddingMode, Int32)

Шифрует данные с помощью режима CFB с указанным режимом заполнения и размером обратной связи.

EncryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode, Int32)

Шифрует данные с помощью режима CFB с указанным режимом заполнения и размером обратной связи.

EncryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

Шифрует данные в указанный буфер, используя режим CFB с указанным режимом заполнения и размером обратной связи.

EncryptEcb(Byte[], PaddingMode)

Шифрует данные с помощью режима ECB с указанным режимом заполнения.

EncryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Шифрует данные с помощью режима ECB с указанным режимом заполнения.

EncryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode)

Шифрует данные в указанный буфер, используя режим ECB с указанным режимом заполнения.

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
Finalize()

Этот член переопределяет Finalize(); по данной теме может быть доступна более полная документация.

Позволяет объекту Object попытаться освободить ресурсы и выполнить другие операции очистки, перед тем как объект Object будет утилизирован в процессе сборки мусора.

GenerateIV()

При переопределении в производном классе генерирует случайный вектор инициализации (IV), используемый для алгоритма.

GenerateKey()

При переопределении в производном классе генерирует случайный ключ (Key), используемый для алгоритма.

GetCiphertextLengthCbc(Int32, PaddingMode)

Возвращает длину зашифрованного текста с заданным режимом заполнения и длину открытого текста в режиме CBC.

GetCiphertextLengthCfb(Int32, PaddingMode, Int32)

Возвращает длину зашифрованного текста с заданным режимом заполнения и длину открытого текста в режиме CFB.

GetCiphertextLengthEcb(Int32, PaddingMode)

Возвращает длину зашифрованного текста с заданным режимом заполнения и длину открытого текста в режиме ЕЦБ.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
TryDecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode)

Пытается расшифровать данные в указанный буфер, используя режим CBC с указанным режимом заполнения.

TryDecryptCbcCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

При переопределении в производном классе пытается расшифровать данные в указанный буфер, используя режим CBC с указанным режимом заполнения.

TryDecryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode, Int32)

Пытается расшифровать данные в указанный буфер, используя режим CFB с указанным режимом заполнения и размером обратной связи.

TryDecryptCfbCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32, Int32)

При переопределении в производном классе пытается расшифровать данные в указанный буфер, используя режим CFB с указанным режимом заполнения и размером обратной связи.

TryDecryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

Пытается расшифровать данные в указанный буфер, используя режим ECB с указанным режимом заполнения.

TryDecryptEcbCore(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

При переопределении в производном классе пытается расшифровать данные в указанный буфер, используя режим ECB с указанным режимом заполнения.

TryEncryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode)

Пытается зашифровать данные в указанный буфер, используя режим CBC с указанным режимом заполнения.

TryEncryptCbcCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

При переопределении в производном классе пытается зашифровать данные в указанный буфер, используя режим CBC с указанным режимом заполнения.

TryEncryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode, Int32)

Пытается зашифровать данные в указанный буфер, используя режим CFB с указанным режимом заполнения и размером обратной связи.

TryEncryptCfbCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32, Int32)

При переопределении в производном классе пытается зашифровать данные в указанный буфер, используя режим CFB с указанным режимом заполнения и размером обратной связи.

TryEncryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

Пытается зашифровать данные в указанный буфер, используя режим ECB с указанным режимом заполнения.

TryEncryptEcbCore(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

При переопределении в производном классе пытается зашифровать данные в указанный буфер, используя режим ECB с указанным режимом заполнения.

ValidKeySize(Int32)

Определяет, является ли заданный размер ключа допустимым для текущего алгоритма.

Явные реализации интерфейса

IDisposable.Dispose()

Этот API поддерживает инфраструктуру продукта и не предназначен для использования непосредственно из программного кода.

Освобождает неуправляемые ресурсы, используемые объектом SymmetricAlgorithm, а при необходимости освобождает также управляемые ресурсы.

Применяется к

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1

См. также раздел