Funzione CryptProtectData (dpapi.h)

La funzione CryptProtectData esegue la crittografia sui dati in una struttura di 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 contenente una password o un'altra entropia aggiuntiva usata per crittografare i dati. La struttura DATA_BLOB utilizzata nella fase di crittografia deve essere usata anche 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 l'uso futuro e deve essere impostato su NULL.

[in, optional] pPromptStruct

Puntatore a una struttura CRYPTPROTECT_PROMPTSTRUCT che fornisce informazioni su dove e quando devono essere visualizzati i prompt e il 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.

Valore Significato
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 (interfaccia utente) non è un'opzione. Quando questo flag è impostato e viene specificato un'interfaccia utente per l'operazione di protezione o non 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 non 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'uso della struttura DATA_BLOB , liberare 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 sull'errore estese, chiamare GetLastError.

Commenti

In genere, solo un utente con credenziali di accesso corrispondenti a quelle dell'utente che hanno crittografato i dati possono 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 roaming può decrittografare i dati da un altro computer nella 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 controllo di integrità chiave (MAC) a un controllo di integrità crittografato per proteggere i dati da manomissione dei dati.

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

Esempio

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

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

Vedi anche

CryptProtectMemory

CryptUnprotectData

Funzioni di crittografia dei dati e decrittografia

LocalFree