Данная статья переведена с помощью средств машинного перевода. Чтобы просмотреть ее на английском языке, установите флажок Английский. Вы также можете просматривать английский текст во всплывающем окне, наводя указатель мыши на переведенный текст.
Перевод
Английский

Класс ProtectedData

 

Опубликовано: Октябрь 2016

Предоставляет методы для шифрования и расшифровки данных. Этот класс не наследуется.

Пространство имен:   System.Security.Cryptography
Сборка:  System.Security (в System.Security.dll)

System.Object
  System.Security.Cryptography.ProtectedData

[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public static class ProtectedData

ИмяОписание
System_CAPS_pubmethodSystem_CAPS_staticProtect(Byte[], Byte[], DataProtectionScope)

Зашифровывает данные в заданном массиве байтов и возвращает массив байтов, содержащий зашифрованные данные.

System_CAPS_pubmethodSystem_CAPS_staticUnprotect(Byte[], Byte[], DataProtectionScope)

Расшифровывает данные в заданном массиве байтов и возвращает массив байтов, содержащий расшифрованные данные.

Этот класс предоставляет доступ для защиты данных API (DPAPI) в Microsoft Windows 2000 и более поздних операционных системах. Это служба, которая предоставляется операционной системой и не требует дополнительных библиотек. Эта технология обеспечивает защиту с помощью учетных данных пользователя или компьютера для шифрования или расшифровки данных.

Класс состоит из двух оболочками для неуправляемого интерфейса DPAPI Protect и Unprotect. Эти два метода могут использоваться для шифрования и расшифровки данных, таких как пароли, ключи и строки подключения.

При использовании этих методов во время олицетворения пользователя, может появиться следующая ошибка: «Недопустимый ключ для использования в указанном состоянии». Это происходит потому, что DPAPI хранит данные ключей в профиле пользователя. Если профиль не загружен, DPAPI не сможете выполнить дешифрование. Чтобы предотвратить эту ошибку, загрузите профиль пользователя, которого необходимо олицетворить, перед вызовом любого метода. Использование DPAPI с олицетворением может добавить существенную сложность и требует тщательного проектных решений.

Следующий пример демонстрирует использование защиты данных.

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

}

.NET Framework
Доступно с 2.0
Windows Phone Silverlight
Доступно с 7.1

Любые открытые статические элементы ( Предоставлен общий доступ в Visual Basic) этого типа являются потокобезопасными. Потокобезопасность элементов экземпляров не гарантируется.

Вернуться в начало
Показ: