¿Le resultó útil esta página?
Sus comentarios sobre este contenido son muy importantes. Háganos saber su opinión.
¿Tiene comentarios adicionales?
Caracteres restantes: 1500
SymmetricAlgorithm (Clase)
Collapse the table of content
Expand the table of content

SymmetricAlgorithm (Clase)

Actualización: noviembre 2007

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

Espacio de nombres:  System.Security.Cryptography
Ensamblado:  mscorlib (en mscorlib.dll)

[ComVisibleAttribute(true)]
public abstract class SymmetricAlgorithm : IDisposable
/** @attribute ComVisibleAttribute(true) */
public abstract class SymmetricAlgorithm implements IDisposable
public abstract class SymmetricAlgorithm implements IDisposable

Las clases derivadas de la clase SymmetricAlgorithm utilizan un modo de encadenamiento denominado Cipher block chaining (CBC), que requiere una clave (Key) y un vector de inicialización (IV) para realizar las transformaciones criptográficas de los datos. Para descifrar los datos cifrados utilizando una de las clases SymmetricAlgorithm, deberá establecer las propiedades Key y IV en el mismo valor que tenían cuando se cifraron los datos. Para que un algoritmo simétrico resulte útil, la clave secreta sólo deben conocerla el remitente y el receptor.

RijndaelManaged, DESCryptoServiceProvider, RC2CryptoServiceProvider y TripleDESCryptoServiceProvider son implementaciones de algoritmos simétricos.

Tenga en cuenta que al utilizar clases derivadas, desde el punto de vista de la seguridad, es suficiente forzar una recolección de elementos no utilizados después de haber terminado de utilizar el objeto. Se debe llamar de forma explícita al método Clear en el objeto para poner a cero cualquier tipo de información confidencial dentro del objeto antes de liberarlo. Tenga en cuenta que la recolección de elementos no utilizados no pone a cero el contenido de los objetos recopilados, sino que simplemente marca la memoria como disponible para la reasignación. Así, los datos contenidos dentro del objeto recopilado como elemento no utilizado pueden estar aún presentes en el montón de memoria sin asignar. En el caso de los 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 información confidencial implementan un método Clear. Al llamar a este método, el método Clear sobrescribe con ceros toda la información confidencial del objeto y, a continuación, lo libera para que pueda recopilarse como elemento no utilizado de forma segura. Una vez puesto a cero el objeto y recopilado, debería llamar al método Dispose con el parámetrodisposing establecido en True para eliminar todos los recursos administrados y no administrados asociados al objeto.

Notas para los herederos:

Cuando se hereda de las clase SymmetricAlgorithm, deben reemplazarse los siguientes miembros: CreateDecryptor, CreateEncryptor, GenerateIV y GenerateKey.

El siguiente ejemplo de código utiliza la clase RijndaelManaged con la propiedad Key y el vector de inicialización especificados (IV) para cifrar un archivo determinado mediante inName y enviar el resultado cifrado al archivo especificado mediante outName. Los parámetros desKey y desIV del método son matrices de 8 bytes. Para implementar este ejemplo, se debe tener instalado el paquete de cifrado de alto nivel.

private static void EncryptData(String inName, String outName, byte[] rijnKey, byte[] rijnIV)
 {    
     //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.

     SymmetricAlgorithm rijn = SymmetricAlgorithm.Create(); //Creates the default implementation, which is RijndaelManaged.         
     CryptoStream encStream = 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 = rdlen + len;
         Console.WriteLine("{0} bytes processed", rdlen);
     }

     encStream.Close();  
     fout.Close();
     fin.Close();                   
 }


private static void EncryptData(String inName, String outName,
    ubyte rijnKey[], ubyte rijnIV[])
{
    //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.
    //Following is intermediate storage for the encryption.
    ubyte bin[] = new ubyte[100]; 
    //Following is the total number of bytes written.
    long rdlen = 0;
    //Following is the total length of the input file.
    long totlen = fin.get_Length(); 
    //Following is the number of bytes to be written at a time.
    int len; 

    //Create the default implementation, which is RijndaelManaged.         
    SymmetricAlgorithm rijn = SymmetricAlgorithm.Create(); 
    CryptoStream encStream = 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 = rdlen + len;
        Console.WriteLine("{0} bytes processed", (System.Int64)rdlen);
    }
    encStream.Close();
    fout.Close();
    fin.Close();
} //EncryptData


Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile para Smartphone, Windows Mobile para Pocket PC

.NET Framework y .NET Compact Framework no admiten todas las versiones de cada plataforma. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

.NET Framework

Compatible con: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Compatible con: 3.5, 2.0

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft