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 |
---|---|
|
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. |
|
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. |
|
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 |