Função CryptProtectData (dpapi.h)
A função CryptProtectData executa criptografia nos dados em uma estrutura DATA_BLOB . Normalmente, apenas um usuário com a mesma credencial de logon que o usuário que criptografou os dados pode descriptografar os dados. Além disso, a criptografia e a descriptografia geralmente devem ser feitas no mesmo computador. Para obter informações sobre exceções, consulte Comentários.
Sintaxe
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
);
Parâmetros
[in] pDataIn
Um ponteiro para uma estrutura DATA_BLOB que contém o texto sem formatação a ser criptografado.
[in, optional] szDataDescr
Uma cadeia de caracteres com uma descrição legível dos dados a serem criptografados. Essa cadeia de caracteres de descrição está incluída com os dados criptografados. Esse parâmetro é opcional e pode ser definido como NULL.
[in, optional] pOptionalEntropy
Um ponteiro para uma estrutura DATA_BLOB que contém uma senha ou outra entropia adicional usada para criptografar os dados. A estrutura DATA_BLOB usada na fase de criptografia também deve ser usada na fase de descriptografia. Esse parâmetro pode ser definido como NULL para nenhuma entropia adicional. Para obter informações sobre como proteger senhas, consulte Manipulando senhas.
[in] pvReserved
Reservado para uso futuro e deve ser definido como NULL.
[in, optional] pPromptStruct
Um ponteiro para uma estrutura CRYPTPROTECT_PROMPTSTRUCT que fornece informações sobre onde e quando as solicitações devem ser exibidas e qual deve ser o conteúdo desses prompts. Esse parâmetro pode ser definido como NULL nas fases de criptografia e descriptografia.
[in] dwFlags
Esse parâmetro pode ser um dos sinalizadores a seguir.
Valor | Significado |
---|---|
|
Quando esse sinalizador é definido, ele associa os dados criptografados ao computador atual em vez de a um usuário individual. Qualquer usuário no computador no qual CryptProtectData é chamado pode usar CryptUnprotectData para descriptografar os dados. |
|
Esse sinalizador é usado para situações remotas em que apresentar uma interface do usuário não é uma opção. Quando esse sinalizador é definido e uma interface do usuário é especificada para a operação de proteção ou desprotegição, a operação falha e GetLastError retorna o código ERROR_PASSWORD_RESTRICTION. |
|
Esse sinalizador gera uma auditoria em operações de proteção e desprotegição. As entradas de log de auditoria serão registradas somente se szDataDescr não for NULL e não estiver vazio. |
[out] pDataOut
Um ponteiro para uma estrutura DATA_BLOB que recebe os dados criptografados. Quando terminar de usar a estrutura DATA_BLOB , libere seu membro pbData chamando a função LocalFree .
Valor retornado
Se a função for bem-sucedida, a função retornará TRUE.
Se a função falhar, ela retornará FALSE. Para obter informações de erro estendidas, chame GetLastError.
Comentários
Normalmente, somente um usuário com credenciais de logon que correspondam às do usuário que criptografou os dados pode descriptografar os dados. Além disso, a descriptografia geralmente só pode ser feita no computador em que os dados foram criptografados. No entanto, um usuário com um perfil móvel pode descriptografar os dados de outro computador na rede.
Se o sinalizador CRYPTPROTECT_LOCAL_MACHINE for definido quando os dados forem criptografados, qualquer usuário no computador em que a criptografia foi feita poderá descriptografar os dados.
A função cria uma chave de sessão para executar a criptografia. A chave de sessão é derivada novamente quando os dados devem ser descriptografados.
A função também adiciona um MAC (Código de Autenticação de Mensagem) (marcar de integridade chave) aos dados criptografados para proteger contra violação de dados.
Para criptografar a memória para uso temporário no mesmo processo ou em processos, chame a função CryptProtectMemory .
Exemplos
O exemplo a seguir mostra a criptografia dos dados em uma estrutura DATA_BLOB . A função CryptProtectData faz a criptografia usando uma chave de sessão que a função cria usando as credenciais de logon do usuário. Para obter outro exemplo que usa essa função, consulte Exemplo de Programa C: Usando 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);
}
Requisitos
Cliente mínimo com suporte | Windows XP [aplicativos da área de trabalho | aplicativos UWP] |
Servidor mínimo com suporte | Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP] |
Plataforma de Destino | Windows |
Cabeçalho | dpapi.h |
Biblioteca | Crypt32.lib |
DLL | Crypt32.dll |