Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция CryptProtectData выполняет шифрование данных в DATA_BLOB структуре . Как правило, только пользователь с теми же учетными данными входа, что и пользователь, который зашифровал данные, может расшифровать данные. Кроме того, шифрование и расшифровка обычно должны выполняться на одном компьютере. Сведения об исключениях см. в разделе "Примечания".
Синтаксис
DPAPI_IMP BOOL CryptProtectData(
[in] DATA_BLOB *pDataIn,
[in, optional] LPCWSTR szDataDescr,
[in, optional] DATA_BLOB *pOptionalEntropy,
[in] PVOID pvReserved,
[in, optional] CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct,
[in] DWORD dwFlags,
[out] DATA_BLOB *pDataOut
);
Параметры
[in] pDataIn
Указатель на структуру DATA_BLOB , содержащую зашифрованный текст .
[in, optional] szDataDescr
Строка с читаемым описанием данных, которые необходимо зашифровать. Эта строка описания включается в зашифрованные данные. Этот параметр является необязательным и может иметь значение NULL.
[in, optional] pOptionalEntropy
Указатель на структуру DATA_BLOB , содержащую пароль или другую дополнительную энтропию, используемую для шифрования данных. Структура DATA_BLOB , используемая на этапе шифрования, также должна использоваться на этапе расшифровки. Этот параметр может иметь значение NULL без дополнительной энтропии. Сведения о защите паролей см. в разделе "Обработка паролей".
[in] pvReserved
Зарезервировано для дальнейшего использования и должно иметь значение NULL.
[in, optional] pPromptStruct
Указатель на структуру CRYPTPROTECT_PROMPTSTRUCT , которая содержит сведения о том, где и когда должны отображаться запросы, а также содержимое этих запросов. Этот параметр может иметь значение NULL как на этапах шифрования, так и для расшифровки.
[in] dwFlags
Этот параметр может быть одним из следующих флагов. Если флаги не требуются, этот параметр можно задать в значение 0.
| Ценность | Meaning |
|---|---|
| CRYPTPROTECT_LOCAL_MACHINE | Если этот флаг задан, он связывает данные, зашифрованные с текущим компьютером, а не с отдельным пользователем. Любой пользователь на компьютере, на котором вызывается CryptProtectData, может использовать CryptUnprotectData для расшифровки данных. |
| CRYPTPROTECT_UI_FORBIDDEN | Этот флаг используется для удаленных ситуаций, когда представление пользовательского интерфейса не является параметром. Если этот флаг задан, а пользовательский интерфейс указан для операции защиты или отмены защиты, операция завершается ошибкой, и GetLastError возвращает код ERROR_PASSWORD_RESTRICTION . |
| CRYPTPROTECT_AUDIT | Этот флаг создает аудит для операций защиты и отмены защиты. Записи журнала аудита записываются только в том случае, если szDataDescr не имеет значения NULL и не пуст. |
[out] pDataOut
Указатель на структуру DATA_BLOB , которая получает зашифрованные данные. Завершив использование структуры DATA_BLOB , освободив его член pbData , вызвав функцию LocalFree .
Возвращаемое значение
Если функция выполнена успешно, функция возвращает ЗНАЧЕНИЕ TRUE.
Если функция завершается ошибкой, возвращает значение FALSE. Для получения расширенных сведений об ошибке вызовите GetLastError.
Замечания
Как правило, только пользователь с учетными данными входа, которые соответствуют данным, которые шифруют данные, могут расшифровать данные. Кроме того, расшифровка обычно может выполняться только на компьютере, где были зашифрованы данные. Однако пользователь с перемещаемым профилем может расшифровать данные с другого компьютера в сети.
Если флаг CRYPTPROTECT_LOCAL_MACHINE задан при шифровании данных, любой пользователь на компьютере, на котором было выполнено шифрование, может расшифровать данные.
Функция создает ключ сеанса для выполнения шифрования. Ключ сеанса создается снова при расшифровке данных.
Функция также добавляет код проверки подлинности сообщений (MAC) (проверка целостности ключа) в зашифрованные данные для защиты от изменения данных.
Чтобы зашифровать память для временного использования в одном или нескольких процессах, вызовите функцию CryptProtectMemory .
Примеры
В следующем примере показано шифрование данных в DATA_BLOB структуре . Функция CryptProtectData выполняет шифрование с помощью ключа сеанса, созданного функцией с помощью учетных данных входа пользователя. Другой пример, использующий эту функцию, см. в примере программы C: использование CryptProtectData.
// Encrypt data from DATA_BLOB DataIn to DATA_BLOB DataOut.
//--------------------------------------------------------------------
// Declare and initialize variables.
DATA_BLOB DataIn;
DATA_BLOB DataOut;
BYTE *pbDataInput =(BYTE *)"Hello world of data protection.";
DWORD cbDataInput = strlen((char *)pbDataInput)+1;
//--------------------------------------------------------------------
// Initialize the DataIn structure.
DataIn.pbData = pbDataInput;
DataIn.cbData = cbDataInput;
//--------------------------------------------------------------------
// Begin protect phase. Note that the encryption key is created
// by the function and is not passed.
if(CryptProtectData(
&DataIn,
L"This is the description string.", // A description string
// to be included with the
// encrypted data.
NULL, // Optional entropy not used.
NULL, // Reserved.
NULL, // Pass NULL for the
// prompt structure.
0,
&DataOut))
{
printf("The encryption phase worked.\n");
LocalFree(DataOut.pbData);
}
else
{
printf("Encryption error using CryptProtectData.\n");
exit(1);
}
Требования
| Требование | Ценность |
|---|---|
| Минимальный поддерживаемый клиент | Windows XP [классические приложения | Приложения UWP] |
| минимальный поддерживаемый сервер | Windows Server 2003 [классические приложения | Приложения UWP] |
| целевая платформа | Виндоус |
| Header | dpapi.h |
| Library | Crypt32.lib |
| DLL | Crypt32.dll |