SymmetricAlgorithm Classe
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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. |