ProtectedData 클래스

정의

데이터를 암호화하거나 해독하는 메서드를 제공합니다.Provides methods for encrypting and decrypting data. 이 클래스는 상속될 수 없습니다.This class cannot be inherited.

public ref class ProtectedData sealed
public sealed class ProtectedData
type ProtectedData = class
Public NotInheritable Class ProtectedData
상속
ProtectedData

예제

다음 예제에서는 데이터 보호를 사용 하는 방법을 보여 줍니다.The following example shows how to use data protection.

#using <System.Security.dll>

using namespace System;
using namespace System::Security::Cryptography;

public ref class DataProtectionSample
{
private:

   // Create byte array for additional entropy when using Protect method.
   static array<Byte>^s_aditionalEntropy = {9,8,7,6,5};

public:
   static void Main()
   {
      
      // Create a simple byte array containing data to be encrypted.
      array<Byte>^secret = {0,1,2,3,4,1,2,3,4};
      
      //Encrypt the data.
      array<Byte>^encryptedSecret = Protect( secret );
      Console::WriteLine( "The encrypted byte array is:" );
      PrintValues( encryptedSecret );
      
      // Decrypt the data and store in a byte array.
      array<Byte>^originalData = Unprotect( encryptedSecret );
      Console::WriteLine( "{0}The original data is:", Environment::NewLine );
      PrintValues( originalData );
   }

   static array<Byte>^ Protect( array<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_aditionalEntropy, DataProtectionScope::CurrentUser );
      }
      catch ( CryptographicException^ e ) 
      {
         Console::WriteLine( "Data was not encrypted. An error occurred." );
         Console::WriteLine( e );
         return nullptr;
      }
   }

   static array<Byte>^ Unprotect( array<Byte>^data )
   {
      try
      {
         
         //Decrypt the data using DataProtectionScope.CurrentUser.
         return ProtectedData::Unprotect( data, s_aditionalEntropy, DataProtectionScope::CurrentUser );
      }
      catch ( CryptographicException^ e ) 
      {
         Console::WriteLine( "Data was not decrypted. An error occurred." );
         Console::WriteLine( e );
         return nullptr;
      }
   }

   static void PrintValues( array<Byte>^myArr )
   {
      System::Collections::IEnumerator^ myEnum = myArr->GetEnumerator();
      while ( myEnum->MoveNext() )
      {
         Byte i = safe_cast<Byte>(myEnum->Current);
         Console::Write( "\t{0}", i );
      }

      Console::WriteLine();
   }
};

int main()
{
   DataProtectionSample::Main();
}
using System;
using System.Security.Cryptography;

public class DataProtectionSample
{
    // Create byte array for additional entropy when using Protect method.
    static byte [] s_aditionalEntropy = { 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_aditionalEntropy, 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_aditionalEntropy, 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_aditionalEntropy 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_aditionalEntropy, 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_aditionalEntropy, 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

설명

이 클래스는 Windows 운영 체제에서 사용할 수 있는 DPAPI (데이터 보호 API)에 대 한 액세스를 제공 합니다.This class provides access to the Data Protection API (DPAPI) available in Windows operating systems. 추가 라이브러리가 필요 하지 않습니다 하 고 운영 체제에서 제공 되는 서비스입니다.This is a service that is provided by the operating system and does not require additional libraries. 암호화 하거나 데이터를 해독 하는 사용자 또는 컴퓨터 자격 증명을 사용 하 여 보호를 제공 합니다.It provides protection using the user or machine credentials to encrypt or decrypt data.

중요

DPAPI를 기반으로 하기 때문에 ProtectedData 클래스는 Windows 플랫폼 에서만 지원 됩니다.Because it depends on DPAPI, the ProtectedData class is supported on the Windows platform only. Windows 이외의 플랫폼에서 .NET Core를 사용 하면 PlatformNotSupportedException이 throw 됩니다.Its use on .NET Core on platforms other than Windows throws a PlatformNotSupportedException.

클래스는 관리 되지 않는 DPAPI에 대 한 두 래퍼 이루어져 ProtectUnprotect입니다.The class consists of two wrappers for the unmanaged DPAPI, Protect and Unprotect. 이러한 두 메서드는 암호화 및 암호, 키 및 연결 문자열 등의 데이터를 암호 해독에 사용할 수 있습니다.These two methods can be used to encrypt and decrypt data such as passwords, keys, and connection strings.

가장 하는 동안 이러한 메서드를 사용 하는 경우 다음과 같은 오류가 표시 될 수 있습니다. "지정 된 상태에서 키를 사용할 수 없습니다."If you use these methods during impersonation, you may receive the following error: "Key not valid for use in specified state." DPAPI는 사용자 프로필에서 키 데이터를 저장 하기 때문에 발생 합니다.This occurs because the DPAPI stores the key data in user profiles. 프로필 로드 되지 않은 경우 DPAPI를 암호 해독을 수행 하는 일을 할 수 없습니다.If the profile is not loaded, DPAPI won't be able to perform the decryption. 이 오류를 방지 하려면 메서드를 호출 하기 전에 먼저 가장 하려는 사용자의 프로필을 로드 합니다.To prevent this error, load the profile of the user you want to impersonate before calling either method. DPAPI를 사용 하 여 가장을 사용 하 여 중요 한 문제를 초래할 수 있습니다 및 신중한 디자인 선택 해야 합니다.Using DPAPI with impersonation can incur significant complication and requires careful design choices.

메서드

Equals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.Determines whether the specified object is equal to the current object.

(다음에서 상속됨 Object)
GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(다음에서 상속됨 Object)
Protect(Byte[], Byte[], DataProtectionScope)

지정된 바이트 배열에 있는 데이터를 암호화하고 암호화된 데이터가 포함된 바이트 배열을 반환합니다.Encrypts the data in a specified byte array and returns a byte array that contains the encrypted data.

ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(다음에서 상속됨 Object)
Unprotect(Byte[], Byte[], DataProtectionScope)

지정된 바이트 배열에 있는 데이터를 해독하고 해독된 데이터가 포함된 바이트 배열을 반환합니다.Decrypts the data in a specified byte array and returns a byte array that contains the decrypted data.

적용 대상