Classe SymmetricAlgorithm
TOC
Comprimi il sommario
Espandi il sommario

Classe SymmetricAlgorithm

Rappresenta la classe base astratta dalla quale devono ereditare tutte le implementazioni degli algoritmi simmetrici.

Spazio dei nomi: System.Security.Cryptography
Assembly: mscorlib (in mscorlib.dll)

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

Le classi che derivano dalla classe SymmetricAlgorithm utilizzano una modello di concatenazione denominato cipher block chaining (CBC), che richiede una chiave Key e un vettore di inizializzazione IV per eseguire trasformazioni crittografiche sui dati. Per decrittografare dati precedentemente crittografati tramite una delle classi SymmetricAlgorithm, è necessario impostare la proprietà Key e la proprietà IV sugli stessi valori utilizzati per la crittografia. Per garantire l'utilità di un algoritmo simmetrico, la chiave segreta deve essere nota soltanto al mittente e al destinatario.

RijndaelManaged, DESCryptoServiceProvider ,RC2CryptoServiceProvider e TripleDESCryptoServiceProvider sono implementazioni di algoritmi simmetrici.

Quando si utilizzano classi derivate, dal punto di vista della protezione non è sufficiente imporre semplicemente una procedura di Garbage Collection dopo aver terminato di utilizzare l'oggetto. È necessario chiamare in modo esplicito il metodo Clear sull'oggetto per azzerare tutti i dati riservati all'interno dell'oggetto prima che venga rilasciato. Mediante la Garbage Collection non vengono azzerati i contenuti degli oggetti raccolti, ma viene semplicemente contrassegnata la memoria come disponibile per la riallocazione. I dati all'interno di un oggetto raccolto nel Garbage Collector potrebbero pertanto essere ancora presenti nell'heap di memoria nella memoria non allocata. Nel caso di oggetti di crittografia, tra questi dati potrebbero essere incluse informazioni riservate come dati relativi alle chiavi o un blocco di testo normale.

Tutte le classi di crittografia in .NET Framework che contengono dati riservati implementano un metodo Clear. Quando viene chiamato, il metodo Clear sovrascrive con zero tutti i dati riservati all'interno dell'oggetto, quindi rilascia l'oggetto affinché possa essere raccolto nel Garbage Collector in modo sicuro. Quando l'oggetto è stato azzerato e rilasciato, è necessario chiamare il metodo Dispose con il parametro disposing impostato su True per eliminare tutte le risorse gestite e non gestite associate all'oggetto.

Note sull'ereditarietà: Quando si eredita dalla classe SymmetricAlgorithm, è necessario eseguire l'override dei seguenti membri: CreateDecryptor, CreateEncryptor, GenerateIV e GenerateKey.

Nell'esempio di codice riportato di seguito viene utilizzata la classe RijndaelManaged con la proprietà Key e il vettore di inizializzazione IV specificati per crittografare un file specificato da inName. Il risultato crittografato verrà inserito nel file specificato da outName. I parametri desKey e desIV del metodo sono matrici a 8 byte. Per eseguire questo esempio è richiesta la versione di crittografia a 128 bit.

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

I membri statici pubblici (Shared in Visual Basic) di questo tipo sono validi per le operazioni multithreading. I membri di istanza non sono garantiti come thread safe.

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

.NET Framework non supporta tutte le versioni di ciascuna piattaforma. Per un elenco delle versioni supportate, vedere Requisiti di sistema.

.NET Framework

Supportato in: 2.0 1.1 1.0

.NET Compact Framework

Supportato in: 2.0

Aggiunte alla community

AGGIUNGI
Mostra:
© 2016 Microsoft