SymmetricAlgorithm Clase

Definición

Representa la clase base abstracta de la que deben heredarse todas las implementaciones de algoritmos simétricos.

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
Herencia
SymmetricAlgorithm
Derivado
Atributos
Implementaciones

Ejemplos

En el ejemplo de código siguiente se usa la Aes clase con la propiedad y el vector de inicialización especificados Key (IV) para cifrar un archivo especificado por inNamey se genera el resultado cifrado en el archivo especificado por outName. Los desKey parámetros y desIV para el método son matrices de 8 bytes. Debe tener instalado el paquete de cifrado alto para ejecutar este ejemplo.

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

Comentarios

Las clases que derivan de la SymmetricAlgorithm clase usan un modo de encadenamiento de bloques de cifrado denominado encadenamiento de bloques de cifrado (CBC), que requiere una clave (Key) y un vector de inicialización (IV) para realizar transformaciones criptográficas en los datos. Para descifrar los datos cifrados mediante una de las SymmetricAlgorithm clases, debe establecer la Key propiedad y la IV propiedad en los mismos valores que se usaron para el cifrado. Para que un algoritmo simétrico sea útil, la clave secreta solo debe conocerse para el remitente y el receptor.

Aes, DES, RC2y TripleDES son implementaciones de algoritmos simétricos.

Tenga en cuenta que, al usar clases derivadas, no es suficiente, desde una perspectiva de seguridad, forzar simplemente una recolección de elementos no utilizados después de haber terminado de usar el objeto . Debe llamar explícitamente al Clear método en el objeto para que se agote cualquier dato confidencial dentro del objeto antes de que se libere. Tenga en cuenta que la recolección de elementos no utilizados no agota el contenido de los objetos recopilados, sino que simplemente marca la memoria como disponible para la reasignación. Por lo tanto, los datos contenidos en un objeto recolector de elementos no utilizados pueden estar presentes en el montón de memoria en memoria sin asignar. En el caso de los objetos criptográficos, estos datos podrían contener información confidencial, como datos de clave o un bloque de texto sin formato.

Todas las clases criptográficas del .NET Framework que contienen datos confidenciales implementan un Clear método . Cuando se llama, el Clear método sobrescribe todos los datos confidenciales dentro del objeto con ceros y, a continuación, libera el objeto para que se pueda recopilar de forma segura. Cuando el objeto se haya eliminado y liberado, debe llamar al método con el Dispose disposing parámetro establecido en True para eliminar todos los recursos administrados y no administrados asociados al objeto .

Notas a los implementadores

Cuando hereda de la SymmetricAlgorithm clase , debe invalidar los siguientes miembros: CreateDecryptor(Byte[], Byte[]), CreateEncryptor(Byte[], Byte[]), GenerateIV()y GenerateKey().

Constructores

SymmetricAlgorithm()

Inicializa una nueva instancia de la clase SymmetricAlgorithm.

Campos

BlockSizeValue

Representa el tamaño del bloque de la operación criptográfica en bits.

FeedbackSizeValue

Representa el tamaño de respuesta de la operación criptográfica en bits.

IVValue

Representa el vector de inicialización (IV) del algoritmo simétrico.

KeySizeValue

Representa el tamaño en bits de la clave secreta que usa el algoritmo simétrico.

KeyValue

Representa la clave secreta del algoritmo simétrico.

LegalBlockSizesValue

Especifica los tamaños de bloque, en bits, admitidos por el algoritmo simétrico.

LegalKeySizesValue

Especifica los tamaños de clave, en bits, admitidos por el algoritmo simétrico.

ModeValue

Representa el modo de cifrado usado en el algoritmo simétrico.

PaddingValue

Representa el modo de relleno usado en el algoritmo simétrico.

Propiedades

BlockSize

Obtiene o establece el tamaño del bloque de la operación criptográfica en bits.

FeedbackSize

Obtiene o establece el tamaño de los comentarios, en bits, de la operación criptográfica de los modos de cifrado Comentarios de cifrado (CFB) y Comentarios de salida (OFB).

IV

Obtiene o establece el vector de inicialización (IV) del algoritmo simétrico.

Key

Obtiene o establece la clave secreta del algoritmo simétrico.

KeySize

Obtiene o establece el tamaño de la clave secreta utilizada por el algoritmo simétrico en bits.

LegalBlockSizes

Obtiene los tamaños de bloque, en bits, admitidos por el algoritmo simétrico.

LegalKeySizes

Obtiene los tamaños de clave, en bits, admitidos por el algoritmo simétrico.

Mode

Obtiene o establece el modo de funcionamiento del algoritmo simétrico.

Padding

Obtiene o establece el modo de relleno usado en el algoritmo simétrico.

Métodos

Clear()

Libera todos los recursos que utiliza la clase SymmetricAlgorithm.

Create()
Obsoleto.
Obsoleto.

Crea un objeto criptográfico predeterminado para realizar el algoritmo simétrico.

Create(String)

Crea un objeto criptográfico especificado que se usa para realizar el algoritmo simétrico.

CreateDecryptor()

Crea un objeto descifrador simétrico con la propiedad Key y el vector de inicialización (IV) actuales.

CreateDecryptor(Byte[], Byte[])

Cuando se invalida en una clase derivada, crea un objeto descifrador simétrico con la propiedad Key y el vector de inicialización (IV) especificados.

CreateEncryptor()

Crea un objeto cifrador simétrico con la propiedad Key y el vector de inicialización (IV) actuales.

CreateEncryptor(Byte[], Byte[])

Cuando se invalida en una clase derivada, se crea un objeto descifrador simétrico con la propiedad Key y el vector de inicialización (IV) especificados.

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

Descifra los datos mediante el modo CBC con el modo de relleno especificado.

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

Descifra los datos mediante el modo CBC con el modo de relleno especificado.

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

Descifra los datos en el búfer especificado, utilizando el modo CBC con el modo de relleno especificado.

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

Descifra los datos mediante el modo CFB con el modo de relleno y el tamaño de comentarios especificados.

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

Descifra los datos mediante el modo CFB con el modo de relleno y el tamaño de comentarios especificados.

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

Descifra los datos en el búfer especificado, utilizando el modo CFB con el modo de relleno y el tamaño de comentarios especificados.

DecryptEcb(Byte[], PaddingMode)

Descifra los datos mediante el modo ECB con el modo de relleno especificado.

DecryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Descifra los datos mediante el modo ECB con el modo de relleno especificado.

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

Descifra los datos en el búfer especificado, utilizando el modo ECB con el modo de relleno especificado.

Dispose()

Libera todos los recursos usados por la instancia actual de la clase SymmetricAlgorithm.

Dispose(Boolean)

Libera los recursos no administrados que usa SymmetricAlgorithm y, de forma opcional, libera los recursos administrados.

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

Cifra los datos mediante el modo CBC con el modo de relleno especificado.

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

Cifra los datos mediante el modo CBC con el modo de relleno especificado.

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

Cifra los datos en el búfer especificado, utilizando el modo CBC con el modo de relleno especificado.

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

Cifra los datos mediante el modo CFB con el modo de relleno y el tamaño de comentarios especificados.

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

Cifra los datos mediante el modo CFB con el modo de relleno y el tamaño de comentarios especificados.

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

Cifra los datos en el búfer especificado, utilizando el modo CFB con el modo de relleno y el tamaño de comentarios especificados.

EncryptEcb(Byte[], PaddingMode)

Cifra los datos mediante el modo ECB con el modo de relleno especificado.

EncryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Cifra los datos mediante el modo ECB con el modo de relleno especificado.

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

Cifra los datos en el búfer especificado, utilizando el modo ECB con el modo de relleno especificado.

Equals(Object)

Determina si el objeto especificado es igual que el objeto actual.

(Heredado de Object)
Finalize()

Este miembro reemplaza a Finalize(); puede haber documentación más completa en ese tema.

Permite que un objeto Object intente liberar recursos y realizar otras operaciones de limpieza antes de que el objeto Object sea reclamado por la recolección de elementos no utilizados.

GenerateIV()

Cuando se invalida en una clase derivada, genera un vector de inicialización aleatorio (IV), que se usa para el algoritmo.

GenerateKey()

Cuando se invalida en una clase derivada, genera una clave aleatoria (Key), que se usa para el algoritmo.

GetCiphertextLengthCbc(Int32, PaddingMode)

Obtiene la longitud de un texto cifrado con un modo de relleno determinado y la longitud de texto no cifrado en modo CBC.

GetCiphertextLengthCfb(Int32, PaddingMode, Int32)

Obtiene la longitud de un texto cifrado con un modo de relleno determinado y la longitud de texto no cifrado en modo CFB.

GetCiphertextLengthEcb(Int32, PaddingMode)

Obtiene la longitud de un texto cifrado con un modo de relleno determinado y la longitud de texto no cifrado en modo ECB.

GetHashCode()

Sirve como la función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Object actual.

(Heredado de Object)
ToString()

Devuelve una cadena que representa el objeto actual.

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

Intenta descifrar los datos en el búfer especificado, utilizando el modo CBC con el modo de relleno especificado.

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

Cuando se invalida en una clase derivada, intenta descifrar los datos en el búfer especificado, utilizando el modo CBC con el modo de relleno especificado.

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

Intenta descifrar los datos en el búfer especificado, usando el modo CFB con el modo de relleno y el tamaño de comentarios especificados.

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

Cuando se invalida en una clase derivada, intenta descifrar los datos en el búfer especificado, mediante el modo CFB con el modo de relleno especificado y el tamaño de comentarios.

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

Intenta descifrar los datos en el búfer especificado, utilizando el modo ECB con el modo de relleno especificado.

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

Cuando se invalida en una clase derivada, intenta descifrar los datos en el búfer especificado, utilizando el modo ECB con el modo de relleno especificado.

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

Intenta cifrar los datos en el búfer especificado mediante el modo CBC con el modo de relleno especificado.

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

Cuando se invalida en una clase derivada, intenta cifrar los datos en el búfer especificado, mediante el modo CBC con el modo de relleno especificado.

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

Intenta cifrar los datos en el búfer especificado, utilizando el modo CFB con el modo de relleno y el tamaño de comentarios especificados.

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

Cuando se invalida en una clase derivada, intenta cifrar los datos en el búfer especificado, mediante el modo CFB con el modo de relleno especificado y el tamaño de comentarios.

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

Intenta cifrar los datos en el búfer especificado, utilizando el modo ECB con el modo de relleno especificado.

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

Cuando se invalida en una clase derivada, intenta cifrar los datos en el búfer especificado mediante el modo ECB con el modo de relleno especificado.

ValidKeySize(Int32)

Determina si el tamaño de clave especificado es válido para el algoritmo actual.

Implementaciones de interfaz explícitas

IDisposable.Dispose()

Esta API admite la infraestructura de producto y no está pensada para usarse directamente en el código.

Libera los recursos no administrados que usa SymmetricAlgorithm y, de forma opcional, libera los recursos administrados.

Se aplica a

Consulte también