英語で読む

次の方法で共有


ProtectedData クラス

定義

データの暗号化と暗号化解除のためのメソッドを提供します。 このクラスは継承できません。

public static class ProtectedData
public sealed class ProtectedData
継承
ProtectedData

次の例は、データ保護の使用方法を示しています。

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

注釈

このクラスは、Windows オペレーティング システムで使用できる Data Protection API (DPAPI) へのアクセスを提供します。 これはオペレーティング システムによって提供されるサービスであり、追加のライブラリは必要ありません。 これにより、ユーザーまたはマシンの資格情報を使用してデータを暗号化または暗号化解除する保護が提供されます。

重要

DPAPI に依存するため、 ProtectedData クラスは Windows プラットフォームでのみサポートされます。 Windows 以外のプラットフォームで .NET Core を使用すると、 が PlatformNotSupportedExceptionスローされます。

クラスは、 ProtectUnprotectアンマネージド DPAPI と の 2 つのラッパーで構成されます。 これら 2 つの方法を使用して、パスワード、キー、接続文字列などのデータの暗号化と暗号化解除を行うことができます。

偽装中にこれらのメソッドを使用すると、"キーが指定された状態で使用できません" というエラーが表示されることがあります。これは、DPAPI がキー データをユーザー プロファイルに格納するためです。 プロファイルが読み込まれていない場合、DPAPI は復号化を実行できません。 このエラーを回避するには、いずれかのメソッドを呼び出す前に、偽装するユーザーのプロファイルを読み込みます。 偽装で DPAPI を使用すると、重大な問題が発生する可能性があり、慎重な設計の選択が必要です。

メソッド

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

指定されたバイト配列のデータを暗号化し、暗号化されたデータを含むバイト配列を返します。

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

指定されたバイト配列のデータの暗号化を解除し、暗号化解除されたデータを含むバイト配列を返します。

適用対象

製品 バージョン
.NET Core 1.0, Core 1.1, 6 (package-provided), 7 (package-provided), 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