Edit

Share via


ProtectedData.Unprotect Method

Definition

Overloads

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

Decrypts the data in a specified byte array and returns a byte array that contains the decrypted data.

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

Decrypts the data in a specified byte array and returns a byte array that contains the decrypted data.

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

Decrypts the data in a specified buffer and writes the decrypted data to a destination buffer.

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

Source:
ProtectedData.cs
Source:
ProtectedData.cs
Source:
ProtectedData.cs
Source:
ProtectedData.cs
Source:
ProtectedData.cs

Decrypts the data in a specified byte array and returns a byte array that contains the decrypted data.

public:
 static cli::array <System::Byte> ^ Unprotect(cli::array <System::Byte> ^ encryptedData, cli::array <System::Byte> ^ optionalEntropy, System::Security::Cryptography::DataProtectionScope scope);
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);
static member Unprotect : byte[] * byte[] * System.Security.Cryptography.DataProtectionScope -> byte[]
Public Shared Function Unprotect (encryptedData As Byte(), optionalEntropy As Byte(), scope As DataProtectionScope) As Byte()

Parameters

encryptedData
Byte[]

A byte array containing data encrypted using the Protect(Byte[], Byte[], DataProtectionScope) method.

optionalEntropy
Byte[]

An optional additional byte array that was used to encrypt the data, or null if the additional byte array was not used.

scope
DataProtectionScope

One of the enumeration values that specifies the scope of data protection that was used to encrypt the data.

Returns

Byte[]

A byte array representing the decrypted data.

Exceptions

The encryptedData parameter is null.

The decryption failed.

The operating system does not support this method.

Out of memory.

.NET Core and .NET 5+ only: Calls to the Unprotect method are supported on Windows operating systems only.

Examples

The following code example shows how to use data protection.

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();
    }
}
Imports System.Security.Cryptography



Public Class DataProtectionSample
    ' Create byte array for additional entropy when using Protect method.
    Private Shared s_additionalEntropy As Byte() = {9, 8, 7, 6, 5}


    Public Shared Sub Main()
        ' Create a simple byte array containing data to be encrypted.
        Dim secret As Byte() = {0, 1, 2, 3, 4, 1, 2, 3, 4}

        'Encrypt the data.
        Dim encryptedSecret As Byte() = Protect(secret)
        Console.WriteLine("The encrypted byte array is:")
        PrintValues(encryptedSecret)

        ' Decrypt the data and store in a byte array.
        Dim originalData As Byte() = Unprotect(encryptedSecret)
        Console.WriteLine("{0}The original data is:", Environment.NewLine)
        PrintValues(originalData)

    End Sub


    Public Shared Function Protect(ByVal data() As Byte) As Byte()
        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 e As CryptographicException
            Console.WriteLine("Data was not encrypted. An error occurred.")
            Console.WriteLine(e.ToString())
            Return Nothing
        End Try

    End Function


    Public Shared Function Unprotect(ByVal data() As Byte) As Byte()
        Try
            'Decrypt the data using DataProtectionScope.CurrentUser.
            Return ProtectedData.Unprotect(data, s_additionalEntropy, DataProtectionScope.CurrentUser)
        Catch e As CryptographicException
            Console.WriteLine("Data was not decrypted. An error occurred.")
            Console.WriteLine(e.ToString())
            Return Nothing
        End Try

    End Function


    Public Shared Sub PrintValues(ByVal myArr() As [Byte])
        Dim i As [Byte]
        For Each i In myArr
            Console.Write(vbTab + "{0}", i)
        Next i
        Console.WriteLine()

    End Sub
End Class

Remarks

This method can be used to unprotect data that was encrypted using the Protect method. If the optionalEntropy parameter was used during encryption, it must be supplied to unencrypt the data.

Note

If you use this method during impersonation, you may receive the following error: "Key not valid for use in specified state." To prevent this error, load the profile of the user you want to impersonate before calling the method.

Applies to

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

Source:
ProtectedData.cs

Decrypts the data in a specified byte array and returns a byte array that contains the decrypted data.

public static byte[] Unprotect(ReadOnlySpan<byte> encryptedData, System.Security.Cryptography.DataProtectionScope scope, ReadOnlySpan<byte> optionalEntropy = default);
static member Unprotect : ReadOnlySpan<byte> * System.Security.Cryptography.DataProtectionScope * ReadOnlySpan<byte> -> byte[]
Public Shared Function Unprotect (encryptedData As ReadOnlySpan(Of Byte), scope As DataProtectionScope, Optional optionalEntropy As ReadOnlySpan(Of Byte) = Nothing) As Byte()

Parameters

encryptedData
ReadOnlySpan<Byte>

A buffer that contains data to decrypt.

scope
DataProtectionScope

One of the enumeration values that specifies the scope of encryption.

optionalEntropy
ReadOnlySpan<Byte>

An optional additional buffer used to increase the complexity of the encryption, or empty for no additional complexity.

Returns

Byte[]

A byte array representing the encrypted data.

Exceptions

The encryption failed.

The operating system does not support this method.

The system ran out of memory while decrypting the data.

The operating system is not Windows.

Applies to

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

Source:
ProtectedData.cs

Decrypts the data in a specified buffer and writes the decrypted data to a destination buffer.

public static int Unprotect(ReadOnlySpan<byte> encryptedData, System.Security.Cryptography.DataProtectionScope scope, Span<byte> destination, ReadOnlySpan<byte> optionalEntropy = default);
static member Unprotect : ReadOnlySpan<byte> * System.Security.Cryptography.DataProtectionScope * Span<byte> * ReadOnlySpan<byte> -> int
Public Shared Function Unprotect (encryptedData As ReadOnlySpan(Of Byte), scope As DataProtectionScope, destination As Span(Of Byte), Optional optionalEntropy As ReadOnlySpan(Of Byte) = Nothing) As Integer

Parameters

encryptedData
ReadOnlySpan<Byte>

A buffer that contains data to decrypt.

scope
DataProtectionScope

One of the enumeration values that specifies the scope of encryption.

destination
Span<Byte>

The buffer to receive the decrypted data.

optionalEntropy
ReadOnlySpan<Byte>

An optional additional buffer used to increase the complexity of the encryption, or empty for no additional complexity.

Returns

The total number of bytes written to destination

Exceptions

The buffer in destination is too small to hold the decrypted data.

The encryption failed.

The operating system does not support this method.

The system ran out of memory while encrypting the data.

The operating system is not Windows.

Applies to