Leer en inglés

Compartir a través de


ProtectedData Clase

Definición

Proporciona los métodos para cifrar y descifrar los datos. Esta clase no puede heredarse.

C#
public static class ProtectedData
C#
public sealed class ProtectedData
Herencia
ProtectedData

Ejemplos

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

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

Comentarios

Esta clase proporciona acceso a la API de protección de datos (DPAPI) disponible en sistemas operativos Windows. Se trata de un servicio proporcionado por el sistema operativo y no requiere bibliotecas adicionales. Proporciona protección mediante las credenciales de usuario o máquina para cifrar o descifrar datos.

Importante

Dado que depende de DPAPI, la ProtectedData clase solo se admite en la plataforma Windows. Su uso en .NET Core en plataformas distintas de Windows produce una PlatformNotSupportedExceptionexcepción .

La clase consta de dos contenedores para la DPAPI no administrada y ProtectUnprotect. Estos dos métodos se pueden usar para cifrar y descifrar datos, como contraseñas, claves y cadenas de conexión.

Si usa estos métodos durante la suplantación, puede recibir el siguiente error: "La clave no es válida para su uso en el estado especificado". Esto ocurre porque DPAPI almacena los datos clave en los perfiles de usuario. Si no se carga el perfil, DPAPI no podrá realizar el descifrado. Para evitar este error, cargue el perfil del usuario que desea suplantar antes de llamar a cualquiera de los métodos. El uso de DPAPI con suplantación puede incurrir en complicaciones significativas y requiere opciones de diseño cuidadosas.

Métodos

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

Cifra los datos de una matriz de bytes especificada y devuelve una matriz de bytes que contiene los datos cifrados.

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

Proporciona los métodos para cifrar y descifrar los datos. Esta clase no puede heredarse.

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

Proporciona los métodos para cifrar y descifrar los datos. Esta clase no puede heredarse.

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

Proporciona los métodos para cifrar y descifrar los datos. Esta clase no puede heredarse.

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

Proporciona los métodos para cifrar y descifrar los datos. Esta clase no puede heredarse.

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

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

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

Proporciona los métodos para cifrar y descifrar los datos. Esta clase no puede heredarse.

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

Proporciona los métodos para cifrar y descifrar los datos. Esta clase no puede heredarse.

Se aplica a

Producto Versiones
.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