Compartir por


SymmetricAlgorithm Clase

Definición

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

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 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.

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 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 al remitente y al receptor.

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

Tenga en cuenta que cuando se usan 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 elimine 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 objetos criptográficos, estos datos podrían contener información confidencial, como datos clave o un bloque de texto sin formato.

Todas las clases criptográficas de .NET Framework que contienen datos confidenciales implementan un Clear método. Cuando se llama, el Clear método sobrescribe todos los datos confidenciales del objeto con ceros y, a continuación, libera el objeto para que se pueda recopilar de forma segura. Cuando el objeto se haya cero y liberado, debe llamar al método con el Disposedisposing parámetro establecido en para True 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

Nombre Description
SymmetricAlgorithm()

Inicializa una nueva instancia de la clase SymmetricAlgorithm.

Campos

Nombre Description
BlockSizeValue

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

FeedbackSizeValue

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

IVValue

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

KeySizeValue

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

KeyValue

Representa la clave secreta del algoritmo simétrico.

LegalBlockSizesValue

Especifica los tamaños de bloque, en bits, que son compatibles con el algoritmo simétrico.

LegalKeySizesValue

Especifica los tamaños de clave, en bits, que son compatibles con el algoritmo simétrico.

ModeValue

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

PaddingValue

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

Propiedades

Nombre Description
BlockSize

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

FeedbackSize

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

IV

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

Key

Obtiene o establece la clave secreta para el algoritmo simétrico.

KeySize

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

LegalBlockSizes

Obtiene los tamaños de bloque, en bits, que son compatibles con el algoritmo simétrico.

LegalKeySizes

Obtiene los tamaños de clave, en bits, que son compatibles con el algoritmo simétrico.

Mode

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

Padding

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

Métodos

Nombre Description
Clear()

Libera todos los recursos usados por la SymmetricAlgorithm clase .

Create()
Obsoletos.
Obsoletos.

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

Create(String)
Obsoletos.

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

CreateDecryptor()

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

CreateDecryptor(Byte[], Byte[])

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

CreateEncryptor()

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

CreateEncryptor(Byte[], Byte[])

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

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 mediante 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, mediante 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 SymmetricAlgorithm clase .

Dispose(Boolean)

Libera los recursos no administrados utilizados por SymmetricAlgorithm y, opcionalmente, 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 mediante 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, mediante 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 al objeto actual.

(Heredado de Object)
Finalize()

Este miembro invalida Finalize()y puede haber documentación más completa disponible en ese tema.

Object Permite intentar liberar recursos y realizar otras operaciones de limpieza antes de que la Object recolección de elementos no utilizados la recupere.

GenerateIV()

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

GenerateKey()

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

GetCiphertextLengthCbc(Int32, PaddingMode)

Obtiene la longitud de un texto cifrado con un determinado modo de relleno y 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 determinado modo de relleno y longitud de texto no cifrado en modo ECB.

GetHashCode()

Actúa como función hash predeterminada.

(Heredado de Object)
GetType()

Obtiene el Type de la instancia actual.

(Heredado de Object)
MemberwiseClone()

Crea una copia superficial del Objectactual.

(Heredado de Object)
SetKey(ReadOnlySpan<Byte>)

Establece la clave de esta instancia.

SetKeyCore(ReadOnlySpan<Byte>)

Establece la clave de esta instancia.

ToString()

Devuelve una cadena que representa el objeto actual.

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

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

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

Cuando se reemplaza en una clase derivada, intenta descifrar los datos en el búfer especificado, mediante 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 y el tamaño de comentarios especificados.

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 reemplaza 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 mediante 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 reemplaza en una clase derivada, intenta cifrar los datos en el búfer especificado, mediante el modo CFB con el modo de relleno y el tamaño de comentarios especificados.

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

Intenta cifrar los datos en el búfer especificado mediante 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, utilizando 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

Nombre Description
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 utilizados por SymmetricAlgorithm y, opcionalmente, libera los recursos administrados.

Se aplica a

Consulte también