ProtectedData.Unprotect 方法

定义

重载

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

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

在指定的字节数组中解密数据,并返回包含已解密数据的字节数组。

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

参数

encryptedData
Byte[]

一个字节数组,包含用 Protect(Byte[], Byte[], DataProtectionScope) 方法加密的数据。

optionalEntropy
Byte[]

用于加密数据,或 null 的可选的额外的字节数组,如果不使用额外的字节数组。

scope
DataProtectionScope

指定用来加密数据的数据保护的范围的枚举值之一。

返回

Byte[]

表示已解密数据的字节数组。

例外

encryptedData 参数为 null

解密失败。

该操作系统不支持此方法。

内存不足。

仅限 .NET Core 和 .NET 5+:仅 Windows 操作系统支持调用 Unprotect 方法。

示例

下面的代码示例演示如何使用数据保护。

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

注解

此方法可用于取消保护使用 Protect 方法加密的数据。 optionalEntropy如果在加密期间使用了 参数,则必须提供该参数来取消加密数据。

备注

如果在模拟期间使用此方法,可能会收到以下错误:“密钥在指定状态下使用无效。”若要防止此错误,请在调用 方法之前加载要模拟的用户的配置文件。

适用于

.NET 10 (package-provided) 和其他版本
产品 版本
.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

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

Source:
ProtectedData.cs
C#
public static byte[] Unprotect(ReadOnlySpan<byte> encryptedData, System.Security.Cryptography.DataProtectionScope scope, ReadOnlySpan<byte> optionalEntropy = default);

参数

encryptedData
ReadOnlySpan<Byte>
optionalEntropy
ReadOnlySpan<Byte>

返回

Byte[]

适用于

.NET 10 (package-provided) 和其他版本
产品 版本
.NET 8 (package-provided), 9 (package-provided), 10 (package-provided)
Windows Desktop 10

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

Source:
ProtectedData.cs
C#
public static int Unprotect(ReadOnlySpan<byte> encryptedData, System.Security.Cryptography.DataProtectionScope scope, Span<byte> destination, ReadOnlySpan<byte> optionalEntropy = default);

参数

encryptedData
ReadOnlySpan<Byte>
destination
Span<Byte>
optionalEntropy
ReadOnlySpan<Byte>

返回

适用于

.NET 10 (package-provided) 和其他版本
产品 版本
.NET 8 (package-provided), 9 (package-provided), 10 (package-provided)
Windows Desktop 10