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