ProtectedData.Unprotect(Byte[], Byte[], DataProtectionScope) Método

Definición

Descifra los datos de una matriz de bytes especificada y devuelve una matriz de bytes que contiene los datos descifrados.

public static byte[] Unprotect (byte[] encryptedData, byte[]? optionalEntropy, System.Security.Cryptography.DataProtectionScope scope);
public static byte[] Unprotect (byte[] encryptedData, byte[] optionalEntropy, System.Security.Cryptography.DataProtectionScope scope);

Parámetros

encryptedData
Byte[]

Una matriz de bytes que contiene datos cifrados mediante el método Protect(Byte[], Byte[], DataProtectionScope).

optionalEntropy
Byte[]

Una matriz de bytes adicional opcional que fue utilizada para cifrar los datos o null si no se utilizara la matriz de bytes adicional.

scope
DataProtectionScope

Uno de los valores de enumeración que especifica el ámbito de protección de datos que se uso para cifrar los datos.

Devoluciones

Byte[]

Matriz de bytes que representa los datos descifrados.

Excepciones

El parámetro encryptedData es null.

Se produjo un error en el descifrado.

El sistema operativo no admite este método.

Memoria insuficiente

Solo .NET Core y .NET 5+: las llamadas al Unprotect método solo se admiten en sistemas operativos Windows.

Ejemplos

En el ejemplo de código siguiente se muestra cómo usar la protección de datos.

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();
    }
}

Comentarios

Este método se puede usar para desproteger datos cifrados mediante el Protect método . Si el parámetro se usó durante el optionalEntropy cifrado, se debe proporcionar para descifrar los datos.

Nota

Si usa este método durante la suplantación, puede recibir el siguiente error: "La clave no es válida para su uso en el estado especificado". Para evitar este error, cargue el perfil del usuario que desea suplantar antes de llamar al método .

Se aplica a

Producto Versiones
.NET Core 1.0, Core 1.1, 8 (package-provided), 9 (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 (package-provided), 4.7, 4.7.1 (package-provided), 4.7.1, 4.7.2 (package-provided), 4.7.2, 4.8 (package-provided), 4.8, 4.8.1
.NET Standard 2.0 (package-provided)
Windows Desktop 3.0, 3.1, 5, 6, 7, 8, 9