Compartilhar via


Função CryptProtectData (dpapi.h)

A função CryptProtectData executa criptografia nos dados em uma estrutura de DATA_BLOB . Normalmente, somente 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 de 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 de 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 Como lidar com senhas.

[in] pvReserved

Reservado para uso futuro e deve ser definido como NULL.

[in, optional] pPromptStruct

Um ponteiro para uma estrutura de CRYPTPROTECT_PROMPTSTRUCT que fornece informações sobre onde e quando os prompts devem ser exibidos 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. Se nenhum sinalizador for necessário, esse parâmetro poderá ser definido como 0.

Value Meaning
CRYPTPROTECT_LOCAL_MACHINE 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.
CRYPTPROTECT_UI_FORBIDDEN Esse sinalizador é usado para situações remotas em que apresentar uma interface do usuário (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 desprotegimento, a operação falha e GetLastError retorna o código ERROR_PASSWORD_RESTRICTION .
CRYPTPROTECT_AUDIT Esse sinalizador gera uma auditoria em operações de proteção e desprotegimento. 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 de 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 de retorno

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.

Observações

Normalmente, somente um usuário com credenciais de logon que corresponda aos 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 ) (verificação de integridade com 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 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); 
}

Requirements

Requirement Value
Cliente mínimo suportado Windows XP [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo compatível Windows Server 2003 [aplicativos da área de trabalho | Aplicativos UWP]
da Plataforma de Destino Windows
Header dpapi.h
Library Crypt32.lib
de DLL Crypt32.dll

Consulte também