ProtectedData Classe

Definizione

Fornisce metodi per la crittografia e la decrittografia dei dati. La classe non può essere ereditata.

C#
public static class ProtectedData
C#
public sealed class ProtectedData
Ereditarietà
ProtectedData

Esempio

Nell'esempio seguente viene illustrato come usare la protezione dei dati.

C#
using System;
using System.Security.Cryptography;

public class DataProtectionSample
{
    // Create byte array for additional entropy when using Protect method.
    static byte [] s_additionalEntropy = { 9, 8, 7, 6, 5 };

    public static void Main()
    {
        // Create a simple byte array containing data to be encrypted.
        byte [] secret = { 0, 1, 2, 3, 4, 1, 2, 3, 4 };

        //Encrypt the data.
        byte [] encryptedSecret = Protect( secret );
        Console.WriteLine("The encrypted byte array is:");
        PrintValues(encryptedSecret);

        // Decrypt the data and store in a byte array.
        byte [] originalData = Unprotect( encryptedSecret );
        Console.WriteLine("{0}The original data is:", Environment.NewLine);
        PrintValues(originalData);
    }

    public static byte [] Protect( byte [] data )
    {
        try
        {
            // Encrypt the data using DataProtectionScope.CurrentUser. The result can be decrypted
            // only by the same current user.
            return ProtectedData.Protect( data, s_additionalEntropy, DataProtectionScope.CurrentUser );
        }
        catch (CryptographicException e)
        {
            Console.WriteLine("Data was not encrypted. An error occurred.");
            Console.WriteLine(e.ToString());
            return null;
        }
    }

    public static byte [] Unprotect( byte [] data )
    {
        try
        {
            //Decrypt the data using DataProtectionScope.CurrentUser.
            return ProtectedData.Unprotect( data, s_additionalEntropy, DataProtectionScope.CurrentUser );
        }
        catch (CryptographicException e)
        {
            Console.WriteLine("Data was not decrypted. An error occurred.");
            Console.WriteLine(e.ToString());
            return null;
        }
    }

    public static void PrintValues( Byte[] myArr )
    {
        foreach ( Byte i in myArr )
        {
            Console.Write( "\t{0}", i );
        }
        Console.WriteLine();
    }
}

Commenti

Questa classe fornisce l'accesso all'API Protezione dati (DPAPI) disponibile nei sistemi operativi Windows. Si tratta di un servizio fornito dal sistema operativo e non richiede librerie aggiuntive. Fornisce la protezione usando le credenziali dell'utente o del computer per crittografare o decrittografare i dati.

Importante

Poiché dipende da DPAPI, la ProtectedData classe è supportata solo sulla piattaforma Windows. L'uso in .NET Core su piattaforme diverse da Windows genera un PlatformNotSupportedExceptionoggetto .

La classe è costituita da due wrapper per il DPAPI Protect non gestito e Unprotect. Questi due metodi possono essere usati per crittografare e decrittografare i dati, ad esempio password, chiavi e stringhe di connessione.

Se si usano questi metodi durante la rappresentazione, è possibile che venga visualizzato l'errore seguente: "Chiave non valida per l'uso nello stato specificato". Ciò si verifica perché DPAPI archivia i dati chiave nei profili utente. Se il profilo non viene caricato, DPAPI non sarà in grado di eseguire la decrittografia. Per evitare questo errore, caricare il profilo dell'utente che si vuole rappresentare prima di chiamare un metodo. L'uso di DPAPI con rappresentazione può comportare complicazioni significative e richiede scelte di progettazione accurate.

Metodi

Protect(Byte[], Byte[], DataProtectionScope)

Crittografa i dati in una matrice di byte specificata e restituisce una matrice di byte che contiene i dati crittografati.

Protect(ReadOnlySpan<Byte>, DataProtectionScope, ReadOnlySpan<Byte>)

Fornisce metodi per la crittografia e la decrittografia dei dati. La classe non può essere ereditata.

Protect(ReadOnlySpan<Byte>, DataProtectionScope, Span<Byte>, ReadOnlySpan<Byte>)

Fornisce metodi per la crittografia e la decrittografia dei dati. La classe non può essere ereditata.

TryProtect(ReadOnlySpan<Byte>, DataProtectionScope, Span<Byte>, Int32, ReadOnlySpan<Byte>)

Fornisce metodi per la crittografia e la decrittografia dei dati. La classe non può essere ereditata.

TryUnprotect(ReadOnlySpan<Byte>, DataProtectionScope, Span<Byte>, Int32, ReadOnlySpan<Byte>)

Fornisce metodi per la crittografia e la decrittografia dei dati. La classe non può essere ereditata.

Unprotect(Byte[], Byte[], DataProtectionScope)

Decrittografa i dati in una matrice di byte specificata e restituisce una matrice di byte che contiene i dati decrittografati.

Unprotect(ReadOnlySpan<Byte>, DataProtectionScope, ReadOnlySpan<Byte>)

Fornisce metodi per la crittografia e la decrittografia dei dati. La classe non può essere ereditata.

Unprotect(ReadOnlySpan<Byte>, DataProtectionScope, Span<Byte>, ReadOnlySpan<Byte>)

Fornisce metodi per la crittografia e la decrittografia dei dati. La classe non può essere ereditata.

Si applica a

Prodotto Versioni
.NET Core 1.0, Core 1.1, 8 (package-provided), 9 (package-provided), 10 (package-provided)
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0 (package-provided)
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9, 10