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


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).

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)

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

GetHashCode()

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

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

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

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

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

(Унаследовано от Object)
SetKey(ReadOnlySpan<Byte>)

Задает ключ для этого экземпляра.

SetKeyCore(ReadOnlySpan<Byte>)

Задает ключ для этого экземпляра.

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 и при необходимости освобождает управляемые ресурсы.

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

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