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 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 inName
y 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 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 propiedad en los mismos valores que se usaron para el IV 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 cuando se usan clases derivadas, no es suficiente, desde una perspectiva de seguridad, para 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 libere cualquier dato confidencial dentro del objeto. 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 dentro del objeto con ceros y, a continuación, libera el objeto para que se pueda recopilar de forma segura elementos no utilizados. Cuando el objeto se haya eliminado y liberado, debe llamar al Dispose
método con el 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() |
Obsoletos.
Obsoletos.
Crea un objeto criptográfico predeterminado para realizar el algoritmo simétrico. |
Create(String) |
Obsoletos.
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, 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 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 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() |
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 mediante 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, 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, utilizando 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. |