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-байтовые массивы. Для выполнения этого примера необходимо установить пакет высокого уровня шифрования.
void EncryptData( String^ inName, String^ outName, array<Byte>^aesKey, array<Byte>^aesIV )
{
//Create the file streams to handle the input and output files.
FileStream^ fin = gcnew FileStream( inName,FileMode::Open,FileAccess::Read );
FileStream^ fout = gcnew FileStream( outName,FileMode::OpenOrCreate,FileAccess::Write );
fout->SetLength( 0 );
//Create variables to help with read and write.
array<Byte>^bin = gcnew array<Byte>(100);
long rdlen = 0; //This is the total number of bytes written.
long totlen = (long)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 = gcnew 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 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, 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, а при необходимости освобождает также управляемые ресурсы. |