Condividi tramite


Funzione CryptProtectData (dpapi.h)

La funzione CryptProtectData esegue la crittografia sui dati in una struttura DATA_BLOB . In genere, solo un utente con le stesse credenziali di accesso dell'utente che ha crittografato i dati può decrittografare i dati. Inoltre, la crittografia e la decrittografia in genere devono essere eseguite nello stesso computer. Per informazioni sulle eccezioni, vedere Osservazioni.

Sintassi

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

Parametri

[in] pDataIn

Puntatore a una struttura DATA_BLOB che contiene il testo non crittografato da crittografare.

[in, optional] szDataDescr

Stringa con una descrizione leggibile dei dati da crittografare. Questa stringa di descrizione è inclusa nei dati crittografati. Questo parametro è facoltativo e può essere impostato su NULL.

[in, optional] pOptionalEntropy

Puntatore a una struttura DATA_BLOB che contiene una password o un'altra entropia aggiuntiva usata per crittografare i dati. Anche la struttura DATA_BLOB utilizzata nella fase di crittografia deve essere usata nella fase di decrittografia. Questo parametro può essere impostato su NULL per nessuna entropia aggiuntiva. Per informazioni sulla protezione delle password, vedere Gestione delle password.

[in] pvReserved

Riservato per uso futuro e deve essere impostato su NULL.

[in, optional] pPromptStruct

Puntatore a una struttura di CRYPTPROTECT_PROMPTSTRUCT che fornisce informazioni su dove e quando devono essere visualizzate le richieste e sul contenuto di tali richieste. Questo parametro può essere impostato su NULL nelle fasi di crittografia e decrittografia.

[in] dwFlags

Questo parametro può essere uno dei flag seguenti. Se non sono necessari flag, questo parametro può essere impostato su 0.

Value Meaning
CRYPTPROTECT_LOCAL_MACHINE Quando questo flag è impostato, associa i dati crittografati al computer corrente anziché a un singolo utente. Qualsiasi utente nel computer in cui viene chiamato CryptProtectData può usare CryptUnprotectData per decrittografare i dati.
CRYPTPROTECT_UI_FORBIDDEN Questo flag viene usato per situazioni remote in cui la presentazione di un'interfaccia utente non è un'opzione. Quando questo flag è impostato e viene specificata un'interfaccia utente per l'operazione di protezione o di rimozione della protezione, l'operazione ha esito negativo e GetLastError restituisce il codice ERROR_PASSWORD_RESTRICTION .
CRYPTPROTECT_AUDIT Questo flag genera un controllo sulle operazioni di protezione e rimozione della protezione. Le voci del log di controllo vengono registrate solo se szDataDescr non è NULL e non vuoto.

[out] pDataOut

Puntatore a una struttura DATA_BLOB che riceve i dati crittografati. Al termine dell'utilizzo della struttura DATA_BLOB , liberarne il membro pbData chiamando la funzione LocalFree .

Valore restituito

Se la funzione ha esito positivo, la funzione restituisce TRUE.

Se la funzione ha esito negativo, restituisce FALSE. Per informazioni estese sull'errore, chiamare GetLastError.

Osservazioni:

In genere, solo un utente con credenziali di accesso corrispondenti a quelle dell'utente che ha crittografato i dati può decrittografare i dati. Inoltre, la decrittografia in genere può essere eseguita solo nel computer in cui i dati sono stati crittografati. Tuttavia, un utente con un profilo mobile può decrittografare i dati da un altro computer in rete.

Se il flag CRYPTPROTECT_LOCAL_MACHINE viene impostato quando i dati vengono crittografati, qualsiasi utente nel computer in cui è stata eseguita la crittografia può decrittografare i dati.

La funzione crea una chiave di sessione per eseguire la crittografia. La chiave di sessione viene derivata di nuovo quando i dati devono essere decrittografati.

La funzione aggiunge anche un codice MAC ( Message Authentication Code ) (controllo dell'integrità con chiave) ai dati crittografati per proteggersi dalle manomissioni dei dati.

Per crittografare la memoria per l'uso temporaneo nello stesso processo o tra processi, chiamare la funzione CryptProtectMemory .

Esempi

Nell'esempio seguente viene illustrata la crittografia dei dati in una struttura DATA_BLOB . La funzione CryptProtectData esegue la crittografia usando una chiave di sessione creata dalla funzione usando le credenziali di accesso dell'utente. Per un altro esempio che usa questa funzione, vedere Esempio di programma C: uso di 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); 
}

Requisiti

Requisito Value
Client minimo supportato Windows XP [app desktop | App UWP]
Server minimo supportato Windows Server 2003 [app desktop | App UWP]
Piattaforma di destinazione Windows
Header dpapi.h
Library Crypt32.lib
DLL Crypt32.dll

Vedere anche