Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Classe Rfc2898DeriveBytes

 

Data di pubblicazione: ottobre 2016

Implementa la funzionalità di derivazione della chiave basata su password, PBKDF2, usando un generatore di numeri pseudo-casuali basato su HMACSHA1.

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

System.Object
  System.Security.Cryptography.DeriveBytes
    System.Security.Cryptography.Rfc2898DeriveBytes

[ComVisibleAttribute(true)]
public class Rfc2898DeriveBytes : DeriveBytes

NomeDescrizione
System_CAPS_pubmethodRfc2898DeriveBytes(Byte[], Byte[], Int32)

Inizializza una nuova istanza della classe Rfc2898DeriveBytes usando una password, il salt e il numero di iterazioni per derivare la chiave.

System_CAPS_pubmethodRfc2898DeriveBytes(String, Byte[])

Inizializza una nuova istanza della classe Rfc2898DeriveBytes usando una password e un salt per derivare la chiave.

System_CAPS_pubmethodRfc2898DeriveBytes(String, Byte[], Int32)

Inizializza una nuova istanza della classe Rfc2898DeriveBytes usando una password, il salt e il numero di iterazioni per derivare la chiave.

System_CAPS_pubmethodRfc2898DeriveBytes(String, Int32)

Inizializza una nuova istanza della classe Rfc2898DeriveBytes usando la password e la dimensione del salt per derivare la chiave.

System_CAPS_pubmethodRfc2898DeriveBytes(String, Int32, Int32)

Inizializza una nuova istanza della classe Rfc2898DeriveBytes usando una password, la dimensione del salt e il numero di iterazioni per derivare la chiave.

NomeDescrizione
System_CAPS_pubpropertyIterationCount

Ottiene o imposta il numero di iterazioni per l'operazione.

System_CAPS_pubpropertySalt

Ottiene o imposta il valore del salt della chiave per l'operazione.

NomeDescrizione
System_CAPS_pubmethodCryptDeriveKey(String, String, Int32, Byte[])

Deriva una chiave di crittografia dall'oggetto Rfc2898DeriveBytes.

System_CAPS_pubmethodDispose()

Quando ne viene eseguito l'override in una classe derivata, rilascia tutte le risorse usate dall'istanza corrente della classe DeriveBytes.(Ereditato da DeriveBytes.)

System_CAPS_protmethodDispose(Boolean)

Rilascia le risorse non gestite usate dalla classe Rfc2898DeriveBytes e facoltativamente le risorse gestite.(Esegue l'override di DeriveBytes.Dispose(Boolean).)

System_CAPS_pubmethodEquals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente. (Ereditato da Object.)

System_CAPS_protmethodFinalize()

Consente a un oggetto di provare a liberare risorse ed eseguire altre operazioni di pulizia prima che l'oggetto stesso venga reclamato dalla procedura di Garbage Collection. (Ereditato da Object.)

System_CAPS_pubmethodGetBytes(Int32)

Restituisce la chiave pseudocasuale per questo oggetto.(Esegue l'override di DeriveBytes.GetBytes(Int32).)

System_CAPS_pubmethodGetHashCode()

Funge da funzione hash predefinita.(Ereditato da Object.)

System_CAPS_pubmethodGetType()

Ottiene l'oggetto Type dell'istanza corrente.(Ereditato da Object.)

System_CAPS_protmethodMemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.(Ereditato da Object.)

System_CAPS_pubmethodReset()

Reimposta lo stato dell'operazione.(Esegue l'override di DeriveBytes.Reset().)

System_CAPS_pubmethodToString()

Restituisce una stringa che rappresenta l'oggetto corrente. (Ereditato da Object.)

Rfc2898DeriveBytes takes a password, a salt, and an iteration count, and then generates keys through calls to the GetBytes method.

RFC 2898 includes methods for creating a key and initialization vector (IV) from a password and salt. You can use PBKDF2, a password-based key derivation function, to derive keys using a pseudo-random function that allows keys of virtually unlimited length to be generated. The T:System.Security.Cryptography.Rfc2898DeriveBytes class can be used to produce a derived key from a base key and other parameters. In a password-based key derivation function, the base key is a password and the other parameters are a salt value and an iteration count.

For more information about PBKDF2, see RFC 2898, "PKCS #5: Password-Based Cryptography Specification Version 2.0," available on the Request for Comments Web sitehttp://go.microsoft.com/fwlink/?LinkID=37119. See section 5.2, "PBKDF2," for complete details.

System_CAPS_security Sicurezza Nota

Never hard-code a password within your source code. Hard-coded passwords can be retrieved from an assembly by using the MSIL Disassembler (Ildasm.exe), by using a hexadecimal editor, or by simply opening up the assembly in a text editor such as Notepad.exe.

The following code example uses the T:System.Security.Cryptography.Rfc2898DeriveBytes class to create two identical keys for the T:System.Security.Cryptography.TripleDES class. It then encrypts and decrypts some data using the keys.

using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;

public class rfc2898test
{
    // Generate a key k1 with password pwd1 and salt salt1.
    // Generate a key k2 with password pwd1 and salt salt1.
    // Encrypt data1 with key k1 using symmetric encryption, creating edata1.
    // Decrypt edata1 with key k2 using symmetric decryption, creating data2.
    // data2 should equal data1.

    private const string usageText = "Usage: RFC2898 <password>\nYou must 
specify the password for encryption.\n";
    public static void Main(string[] passwordargs)
    {
        //If no file name is specified, write usage text.
        if (passwordargs.Length == 0)
        {
            Console.WriteLine(usageText);
        }
        else
        {
            string pwd1 = passwordargs[0];
            // Create a byte array to hold the random value. 
            byte[] salt1 = new byte[8];
            using (RNGCryptoServiceProvider rngCsp = new 
RNGCryptoServiceProvider())
            {
                // Fill the array with a random value.
                rngCsp.GetBytes(salt1);
            }

            //data1 can be a string or contents of a file.
            string data1 = "Some test data";
            //The default iteration count is 1000 so the two methods use the 
same iteration count.
            int myIterations = 1000;
            try
            {
                Rfc2898DeriveBytes k1 = new Rfc2898DeriveBytes(pwd1, salt1, 
myIterations);
                Rfc2898DeriveBytes k2 = new Rfc2898DeriveBytes(pwd1, salt1);
                // Encrypt the data.
                TripleDES encAlg = TripleDES.Create();
                encAlg.Key = k1.GetBytes(16);
                MemoryStream encryptionStream = new MemoryStream();
                CryptoStream encrypt = new CryptoStream(encryptionStream, 
encAlg.CreateEncryptor(), CryptoStreamMode.Write);
                byte[] utfD1 = new System.Text.UTF8Encoding(false).GetBytes(
data1);

                encrypt.Write(utfD1, 0, utfD1.Length);
                encrypt.FlushFinalBlock();
                encrypt.Close();
                byte[] edata1 = encryptionStream.ToArray();
                k1.Reset();

                // Try to decrypt, thus showing it can be round-tripped.
                TripleDES decAlg = TripleDES.Create();
                decAlg.Key = k2.GetBytes(16);
                decAlg.IV = encAlg.IV;
                MemoryStream decryptionStreamBacking = new MemoryStream();
                CryptoStream decrypt = new CryptoStream(
decryptionStreamBacking, decAlg.CreateDecryptor(), CryptoStreamMode.Write);
                decrypt.Write(edata1, 0, edata1.Length);
                decrypt.Flush();
                decrypt.Close();
                k2.Reset();
                string data2 = new UTF8Encoding(false).GetString(
decryptionStreamBacking.ToArray());

                if (!data1.Equals(data2))
                {
                    Console.WriteLine("Error: The two values are not equal.");
                }
                else
                {
                    Console.WriteLine("The two values are equal.");
                    Console.WriteLine("k1 iterations: {0}", k1.IterationCount);
                    Console.WriteLine("k2 iterations: {0}", k2.IterationCount);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Error: ", e);
            }

        }
    }
}

.NET Framework
Disponibile da 2.0
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0

I membri statici pubblici ( Condiviso in Visual Basic) di questo tipo è thread safe. Non tutti i membri di istanza sono garantiti come thread safe.

Torna all'inizio
Mostra: