SymmetricAlgorithm Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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 inName
e 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. |