ProtectedData ProtectedData ProtectedData ProtectedData Class

Определение

Предоставляет методы для шифрования и расшифровки данных. 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
Наследование
ProtectedDataProtectedDataProtectedDataProtectedData

Примеры

В следующем примере показано, как для использования защиты данных.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
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

Комментарии

Этот класс предоставляет доступ к API защиты данных (DPAPI) в Microsoft Windows 2000 и более поздних операционных системах.This class provides access to the Data Protection API (DPAPI) available in Microsoft Windows 2000 and later 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 Protect и Unprotect.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) Equals(Object) Equals(Object) Equals(Object)

Определяет, равен ли заданный объект текущему объекту. Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Служит хэш-функцией по умолчанию. Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

Возвращает объект Type для текущего экземпляра. Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Создает неполную копию текущего объекта Object. Creates a shallow copy of the current Object.

(Inherited from Object)
Protect(Byte[], Byte[], DataProtectionScope) Protect(Byte[], Byte[], DataProtectionScope) Protect(Byte[], Byte[], DataProtectionScope) Protect(Byte[], Byte[], DataProtectionScope)

Зашифровывает данные в заданном массиве байтов и возвращает массив байтов, содержащий зашифрованные данные. Encrypts the data in a specified byte array and returns a byte array that contains the encrypted data.

ToString() ToString() ToString() ToString()

Возвращает строку, представляющую текущий объект. Returns a string that represents the current object.

(Inherited from Object)
Unprotect(Byte[], Byte[], DataProtectionScope) Unprotect(Byte[], Byte[], DataProtectionScope) Unprotect(Byte[], Byte[], DataProtectionScope) Unprotect(Byte[], Byte[], DataProtectionScope)

Расшифровывает данные в заданном массиве байтов и возвращает массив байтов, содержащий расшифрованные данные. Decrypts the data in a specified byte array and returns a byte array that contains the decrypted data.

Применяется к