Compartilhar via


SymmetricAlgorithm Classe

Definição

Representa a classe base abstrata da qual todas as implementações de algoritmos simétricos devem ser herdadas.

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
Herança
SymmetricAlgorithm
Derivado
Atributos
Implementações

Exemplos

O exemplo de código a seguir usa a Aes classe com a propriedade especificada Key e o vetor de inicialização (IV) para criptografar um arquivo especificado por inNamee gera o resultado criptografado para o arquivo especificado por outName. Os desKey parâmetros e desIV para o método são matrizes de 8 bytes. Você deve ter o pacote de criptografia alta instalado para executar este exemplo.

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

Comentários

As classes derivadas da SymmetricAlgorithm classe usam um modo de encadeamento chamado CBC (encadeamento de blocos de criptografia), que requer uma chave (Key) e um vetor de inicialização (IV) para executar transformações criptográficas nos dados. Para descriptografar dados que foram criptografados usando uma das SymmetricAlgorithm classes, você deve definir a Key propriedade e a IV propriedade com os mesmos valores que foram usados para criptografia. Para que um algoritmo simétrico seja útil, a chave secreta deve ser conhecida apenas pelo remetente e pelo receptor.

Aes, DES, RC2e TripleDES são implementações de algoritmos simétricos.

Observe que, ao usar classes derivadas, não é suficiente, de uma perspectiva de segurança, simplesmente forçar uma coleta de lixo depois de terminar de usar o objeto . Você deve chamar explicitamente o Clear método no objeto para zero quaisquer dados confidenciais dentro do objeto antes que ele seja liberado. Observe que a coleta de lixo não zerou o conteúdo dos objetos coletados, mas simplesmente marca a memória como disponível para realocação. Portanto, os dados contidos em um objeto coletado de lixo ainda podem estar presentes no heap de memória na memória não alocada. No caso de objetos criptográficos, esses dados podem conter informações confidenciais, como dados de chave ou um bloco de texto sem formatação.

Todas as classes criptográficas no .NET Framework que contêm dados confidenciais implementam um Clear método . Quando chamado, o Clear método substitui todos os dados confidenciais dentro do objeto por zeros e libera o objeto para que ele possa ser coletado com segurança. Quando o objeto tiver sido zerado e liberado, você deverá chamar o Dispose método com o disposing parâmetro definido como True para descartar todos os recursos gerenciados e não gerenciados associados ao objeto.

Notas aos Implementadores

Ao herdar da SymmetricAlgorithm classe , você deve substituir os seguintes membros: CreateDecryptor(Byte[], Byte[]), CreateEncryptor(Byte[], Byte[]), GenerateIV()e GenerateKey().

Construtores

SymmetricAlgorithm()

Inicializa uma nova instância da classe SymmetricAlgorithm.

Campos

BlockSizeValue

Representa o tamanho do bloco, em bits, da operação criptográfica.

FeedbackSizeValue

Representa o tamanho dos comentários, em bits, da operação de criptografia.

IVValue

Representa o vetor de inicialização (IV) do algoritmo simétrico.

KeySizeValue

Representa o tamanho, em bits, da chave secreta usada pelo algoritmo simétrico.

KeyValue

Representa a chave secreta para o algoritmo simétrico.

LegalBlockSizesValue

Especifica os tamanhos de bloco, em bits, que têm suporte pelo algoritmo simétrico.

LegalKeySizesValue

Especifica os tamanhos de chave, em bits, que têm suporte pelo algoritmo simétrico.

ModeValue

Representa o modo de criptografia usado no algoritmo simétrico.

PaddingValue

Representa o modo de preenchimento usado no algoritmo simétrico.

Propriedades

BlockSize

Obtém ou define o tamanho do bloco, em bits, da operação de criptografia.

FeedbackSize

Obtém ou define o tamanho dos comentários, em bits, da operação de criptografia para os modos de codificação CFB (Comentário de Codificação) e OFB (Comentário de Saída).

IV

Obtém ou define o vetor de inicialização (IV) para o algoritmo simétrico.

Key

Obtém ou define a chave secreta para o algoritmo simétrico.

KeySize

Obtém ou define o tamanho, em bits, da chave secreta usada pelo algoritmo simétrico.

LegalBlockSizes

Obtém os tamanhos de bloco, em bits, que tem suporte com o algoritmo simétrico.

LegalKeySizes

Obtém os tamanhos de chave, em bits, que têm suporte pelo algoritmo simétrico.

Mode

Obtém ou define o modo de operação do algoritmo simétrico.

Padding

Obtém ou define o modo de preenchimento usado no algoritmo simétrico.

Métodos

Clear()

Libera todos os recursos usados pela classe SymmetricAlgorithm.

Create()
Obsoleto.
Obsoleto.

Cria um objeto de criptografia padrão usado para executar o algoritmo simétrico.

Create(String)
Obsoleto.

Cria o objeto criptográfico especificado usado para executar o algoritmo simétrico.

CreateDecryptor()

Cria um objeto descriptografador simétrico com a propriedade Key atual e o vetor de inicialização (IV).

CreateDecryptor(Byte[], Byte[])

Quando substituído em uma classe derivada, cria um objeto descriptografador simétrico com a propriedade Key especificada e o vetor de inicialização (IV).

CreateEncryptor()

Cria um objeto criptografador simétrico com a propriedade Key atual e o vetor de inicialização (IV).

CreateEncryptor(Byte[], Byte[])

Quando substituído em uma classe derivada, cria um objeto criptografador simétrico com a propriedade Key especificada e o vetor de inicialização (IV).

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

Descriptografa dados usando o modo CBC com o modo de preenchimento especificado.

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

Descriptografa dados usando o modo CBC com o modo de preenchimento especificado.

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

Descriptografa os dados no buffer especificado, usando o modo CBC com o modo de preenchimento especificado.

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

Descriptografa dados usando o modo CFB com o modo de preenchimento e o tamanho dos comentários especificados.

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

Descriptografa dados usando o modo CFB com o modo de preenchimento e o tamanho dos comentários especificados.

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

Descriptografa os dados no buffer especificado, usando o modo CFB com o modo de preenchimento e o tamanho dos comentários especificados.

DecryptEcb(Byte[], PaddingMode)

Descriptografa dados usando o modo ECB com o modo de preenchimento especificado.

DecryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Descriptografa dados usando o modo ECB com o modo de preenchimento especificado.

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

Descriptografa os dados no buffer especificado, usando o modo ECB com o modo de preenchimento especificado.

Dispose()

Libera todos os recursos usados pela instância atual da classe SymmetricAlgorithm.

Dispose(Boolean)

Libera os recursos não gerenciados usados pelo SymmetricAlgorithm e opcionalmente libera os recursos gerenciados.

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

Criptografa dados usando o modo CBC com o modo de preenchimento especificado.

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

Criptografa dados usando o modo CBC com o modo de preenchimento especificado.

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

Criptografa dados no buffer especificado, usando o modo CBC com o modo de preenchimento especificado.

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

Criptografa dados usando o modo CFB com o modo de preenchimento e o tamanho dos comentários especificados.

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

Criptografa dados usando o modo CFB com o modo de preenchimento e o tamanho dos comentários especificados.

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

Criptografa dados no buffer especificado, usando o modo CFB com o modo de preenchimento e o tamanho dos comentários especificados.

EncryptEcb(Byte[], PaddingMode)

Criptografa dados usando o modo ECB com o modo de preenchimento especificado.

EncryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Criptografa dados usando o modo ECB com o modo de preenchimento especificado.

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

Criptografa dados no buffer especificado, usando o modo ECB com o modo de preenchimento especificado.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
Finalize()

Este membro substitui Finalize(), e pode haver uma documentação mais completa disponível nesse tópico.

Permite que um Object tente liberar recursos e executar outras operações de limpeza antes que Object seja recuperado pela coleta de lixo.

GenerateIV()

Quando substituído em uma classe derivada, gera um vetor de inicialização aleatório (IV) a ser usado para o algoritmo.

GenerateKey()

Quando substituído em uma classe derivada, gera uma chave aleatória (Key) para ser usada com o algoritmo.

GetCiphertextLengthCbc(Int32, PaddingMode)

Obtém o comprimento de um texto cifrado com um determinado modo de preenchimento e comprimento de texto não criptografado no modo CBC.

GetCiphertextLengthCfb(Int32, PaddingMode, Int32)

Obtém o comprimento de um texto cifrado com um determinado modo de preenchimento e comprimento de texto não criptografado no modo CFB.

GetCiphertextLengthEcb(Int32, PaddingMode)

Obtém o comprimento de um texto cifrado com um determinado modo de preenchimento e comprimento de texto não criptografado no modo ECB.

GetHashCode()

Serve como a função de hash padrão.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do Object atual.

(Herdado de Object)
ToString()

Retorna uma cadeia de caracteres que representa o objeto atual.

(Herdado de Object)
TryDecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode)

Tenta descriptografar dados no buffer especificado, usando o modo CBC com o modo de preenchimento especificado.

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

Quando substituído em uma classe derivada, tenta descriptografar dados no buffer especificado, usando o modo CBC com o modo de preenchimento especificado.

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

Tenta descriptografar dados no buffer especificado, usando o modo CFB com o modo de preenchimento e o tamanho dos comentários especificados.

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

Quando substituído em uma classe derivada, tenta descriptografar dados no buffer especificado, usando o modo CFB com o modo de preenchimento e o tamanho dos comentários especificados.

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

Tenta descriptografar dados no buffer especificado, usando o modo ECB com o modo de preenchimento especificado.

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

Quando substituído em uma classe derivada, tenta descriptografar dados no buffer especificado, usando o modo ECB com o modo de preenchimento especificado.

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

Tenta criptografar dados no buffer especificado, usando o modo CBC com o modo de preenchimento especificado.

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

Quando substituído em uma classe derivada, tenta criptografar dados no buffer especificado, usando o modo CBC com o modo de preenchimento especificado.

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

Tenta criptografar dados no buffer especificado, usando o modo CFB com o modo de preenchimento e o tamanho dos comentários especificados.

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

Quando substituído em uma classe derivada, tenta criptografar dados no buffer especificado, usando o modo CFB com o modo de preenchimento e o tamanho dos comentários especificados.

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

Tenta criptografar dados no buffer especificado, usando o modo ECB com o modo de preenchimento especificado.

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

Quando substituído em uma classe derivada, tenta criptografar dados no buffer especificado, usando o modo ECB com o modo de preenchimento especificado.

ValidKeySize(Int32)

Determina se o tamanho da chave especificado é válido para o algoritmo atual.

Implantações explícitas de interface

IDisposable.Dispose()

Esta API dá suporte à infraestrutura do produto e não deve ser usada diretamente do seu código.

Libera os recursos não gerenciados usados pelo SymmetricAlgorithm e opcionalmente libera os recursos gerenciados.

Aplica-se a

Confira também