SymmetricAlgorithm Класс

Определение

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

public ref class SymmetricAlgorithm abstract : IDisposable
public abstract class SymmetricAlgorithm : IDisposable
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class SymmetricAlgorithm : IDisposable
type SymmetricAlgorithm = class
    interface IDisposable
[<System.Runtime.InteropServices.ComVisible(true)>]
type SymmetricAlgorithm = class
    interface IDisposable
Public MustInherit Class SymmetricAlgorithm
Implements IDisposable
Наследование
SymmetricAlgorithm
Производный
Атрибуты
Реализации

Примеры

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

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();
 }
Private Shared Sub EncryptData(inName As String, outName As String, _
rijnKey() As Byte, rijnIV() As Byte)

    'Create the file streams to handle the input and output files.
    Dim fin As New FileStream(inName, FileMode.Open, FileAccess.Read)
    Dim fout As New FileStream(outName, FileMode.OpenOrCreate, _
       FileAccess.Write)
    fout.SetLength(0)
    
    'Create variables to help with read and write.
    Dim bin(100) As Byte 'This is intermediate storage for the encryption.
    Dim rdlen As Long = 0 'This is the total number of bytes written.
    Dim totlen As Long = fin.Length 'Total length of the input file.
    Dim len As Integer 'This is the number of bytes to be written at a time.
    'Creates the default implementation, which is RijndaelManaged.
    Dim rijn As SymmetricAlgorithm = SymmetricAlgorithm.Create()
    Dim encStream As New CryptoStream(fout, _
       rijn.CreateEncryptor(rijnKey, rijnIV), 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 = Convert.ToInt32(rdlen + len)
        Console.WriteLine("{0} bytes processed", rdlen)
    End While
    
    encStream.Close()
fout.Close()
fin.Close()
End Sub

Комментарии

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

Aes, , DESRC2и 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).

Dispose()

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

Dispose(Boolean)

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

Equals(Object)

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

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

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

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

GenerateIV()

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

GenerateKey()

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

GetHashCode()

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

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

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

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

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

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

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

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

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

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

Имя Описание
IDisposable.Dispose()

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

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

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

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