SymmetricAlgorithm Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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. |