SymmetricAlgorithm Classe

Definição

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

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 seguinte exemplo de código usa a Aes classe com a propriedade especificada Key e o vetor de inicialização (IV) para encriptar um ficheiro especificado por inName, e gera o resultado encriptado para o ficheiro especificado por outName. Os desKey parâmetros e desIV do método são arrays de 8 bytes. Tens de ter instalado o pacote de alta encriptação para executar este exemplo.

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

Observações

As classes que derivam da SymmetricAlgorithm classe utilizam um modo de encadeamento chamado encadeamento de blocos cifrados (CBC), que requer uma chave (Key) e um vetor de inicialização (IV) para realizar transformações criptográficas nos dados. Para desencriptar dados que foram encriptados usando uma das SymmetricAlgorithm classes, deve definir a Key propriedade e a IV propriedade para os mesmos valores usados para encriptação. Para que um algoritmo simétrico seja útil, a chave secreta deve ser conhecida apenas pelo emissor e pelo recetor.

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

Note que, ao usar classes derivadas, não é suficiente, do ponto de vista da segurança, simplesmente forçar uma recolha de lixo depois de terminar de usar o objeto. Deve chamar explicitamente o Clear método no objeto para zerar quaisquer dados sensíveis dentro do objeto antes de serem libertados. Note que a recolha de lixo não zera o conteúdo dos objetos recolhidos, apenas marca a memória como disponível para realocação. Assim, os dados contidos num objeto recolhido de lixo podem ainda estar presentes no heap de memória na memória não alocada. No caso de objetos criptográficos, estes dados podem conter informações sensíveis, como dados de chave ou um bloco de texto simples.

Todas as classes criptográficas no .NET Framework que detêm dados sensíveis implementam um método Clear. Quando chamado, o Clear método sobrescrive todos os dados sensíveis dentro do objeto com zeros e depois liberta o objeto para que possa ser recolhido de lixo em segurança. Quando o objeto for zerado e libertado, deve então chamar o Dispose método com o disposing parâmetro definido para True eliminar todos os recursos geridos e não geridos associados ao objeto.

Notas para Implementadores

Quando herdas da SymmetricAlgorithm classe, tens de sobrescrever os seguintes membros: CreateDecryptor(Byte[], Byte[]), CreateEncryptor(Byte[], Byte[]), GenerateIV(), e GenerateKey().

Construtores

Name Description
SymmetricAlgorithm()

Inicializa uma nova instância da SymmetricAlgorithm classe.

Campos

Name Description
BlockSizeValue

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

FeedbackSizeValue

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

IVValue

Representa o vetor de inicialização (IV) para o 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 dos blocos, em bits, suportados pelo algoritmo simétrico.

LegalKeySizesValue

Especifica os tamanhos de chave, em bits, suportados pelo algoritmo simétrico.

ModeValue

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

PaddingValue

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

Propriedades

Name Description
BlockSize

Obtém ou define o tamanho do bloco, em bits, da operação criptográfica.

FeedbackSize

Obtém ou define o tamanho do feedback, em bits, da operação criptográfica para os modos de cifra de Cifra Feedback (CFB) e Output Feedback (OFB).

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 dos blocos, em bits, suportados pelo algoritmo simétrico.

LegalKeySizes

Obtém os tamanhos das chaves, em bits, suportados 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 enchimento usado no algoritmo simétrico.

Métodos

Name Description
Clear()

Liberta todos os recursos usados pela SymmetricAlgorithm turma.

Create()

Cria um objeto criptográfico padrão usado para executar o algoritmo simétrico.

Create(String)

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

CreateDecryptor()

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

CreateDecryptor(Byte[], Byte[])

Quando sobrescrito numa classe derivada, cria-se um objeto desencriptador simétrico com a propriedade e vetor de inicialização especificados Key (IV).

CreateEncryptor()

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

CreateEncryptor(Byte[], Byte[])

Quando sobrescrito numa classe derivada, cria-se um objeto encriptador simétrico com a propriedade especificada Key e o vetor de inicialização (IV).

Dispose()

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

Dispose(Boolean)

Liberta os recursos não geridos usados pelo SymmetricAlgorithm e opcionalmente liberta os recursos geridos.

Equals(Object)

Determina se o objeto especificado é igual ao objeto atual.

(Herdado de Object)
Finalize()

Este membro sobrepõe-se Finalize(), e pode estar disponível documentação mais completa nesse tópico.

Permite Object tentar libertar recursos e realizar outras operações de limpeza antes de ser Object recuperado por recolha de lixo.

GenerateIV()

Quando sobrescrito numa classe derivada, gera um vetor de inicialização aleatório (IV) para usar no algoritmo.

GenerateKey()

Quando sobrescrito numa classe derivada, gera uma chave aleatória (Key) para usar no algoritmo.

GetHashCode()

Serve como função de hash predefinida.

(Herdado de Object)
GetType()

Obtém o Type da instância atual.

(Herdado de Object)
MemberwiseClone()

Cria uma cópia superficial do atual Object.

(Herdado de Object)
ToString()

Devolve uma cadeia que representa o objeto atual.

(Herdado de Object)
ValidKeySize(Int32)

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

Implementações de Interface Explícita

Name Description
IDisposable.Dispose()

Esta API suporta a infraestrutura de produtos e não é pressuposta para ser utilizada diretamente a partir do seu código.

Liberta os recursos não geridos usados pelo SymmetricAlgorithm e opcionalmente liberta os recursos geridos.

Aplica-se a

Ver também