Fungsi CryptProtectData (dpapi.h)
Fungsi CryptProtectData melakukan enkripsi pada data dalam struktur DATA_BLOB . Biasanya, hanya pengguna dengan kredensial masuk yang sama dengan pengguna yang mengenkripsi data yang dapat mendekripsi data. Selain itu, enkripsi dan dekripsi biasanya harus dilakukan pada komputer yang sama. Untuk informasi tentang pengecualian, lihat Keterangan.
Sintaks
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
);
Parameter
[in] pDataIn
Penunjuk ke struktur DATA_BLOB yang berisi teks biasa yang akan dienkripsi.
[in, optional] szDataDescr
String dengan deskripsi data yang dapat dibaca untuk dienkripsi. String deskripsi ini disertakan dengan data terenkripsi. Parameter ini bersifat opsional dan dapat diatur ke NULL.
[in, optional] pOptionalEntropy
Penunjuk ke struktur DATA_BLOB yang berisi kata sandi atau entropi tambahan lainnya yang digunakan untuk mengenkripsi data. Struktur DATA_BLOB yang digunakan dalam fase enkripsi juga harus digunakan dalam fase dekripsi. Parameter ini dapat diatur ke NULL tanpa entropi tambahan. Untuk informasi tentang melindungi kata sandi, lihat Menangani Kata Sandi.
[in] pvReserved
Dicadangkan untuk penggunaan di masa mendatang dan harus diatur ke NULL.
[in, optional] pPromptStruct
Penunjuk ke struktur CRYPTPROTECT_PROMPTSTRUCT yang menyediakan informasi tentang di mana dan kapan perintah akan ditampilkan dan apa konten perintah tersebut. Parameter ini dapat diatur ke NULL dalam fase enkripsi dan dekripsi.
[in] dwFlags
Parameter ini bisa menjadi salah satu bendera berikut.
Nilai | Makna |
---|---|
|
Ketika bendera ini diatur, bendera ini mengaitkan data yang dienkripsi dengan komputer saat ini alih-alih dengan pengguna individual. Setiap pengguna di komputer tempat CryptProtectData dipanggil dapat menggunakan CryptUnprotectData untuk mendekripsi data. |
|
Bendera ini digunakan untuk situasi jarak jauh di mana menyajikan antarmuka pengguna (UI) bukanlah pilihan. Ketika bendera ini diatur dan UI ditentukan untuk operasi lindungi atau tidak terlindungi, operasi gagal dan GetLastError mengembalikan kode ERROR_PASSWORD_RESTRICTION. |
|
Bendera ini menghasilkan audit tentang operasi perlindungan dan pembatalan perlindungan. Entri log audit dicatat hanya jika szDataDescr bukan NULL dan tidak kosong. |
[out] pDataOut
Penunjuk ke struktur DATA_BLOB yang menerima data terenkripsi. Setelah Anda selesai menggunakan struktur DATA_BLOB , bebaskan anggota pbData-nya dengan memanggil fungsi LocalFree .
Mengembalikan nilai
Jika fungsi berhasil, fungsi mengembalikan TRUE.
Jika fungsi gagal, fungsi akan mengembalikan FALSE. Untuk informasi kesalahan yang diperluas, hubungi GetLastError.
Keterangan
Biasanya, hanya pengguna dengan kredensial masuk yang cocok dengan pengguna yang mengenkripsi data yang dapat mendekripsi data. Selain itu, dekripsi biasanya hanya dapat dilakukan di komputer tempat data dienkripsi. Namun, pengguna dengan profil roaming dapat mendekripsi data dari komputer lain di jaringan.
Jika bendera CRYPTPROTECT_LOCAL_MACHINE diatur saat data dienkripsi, setiap pengguna di komputer tempat enkripsi dilakukan dapat mendekripsi data.
Fungsi ini membuat kunci sesi untuk melakukan enkripsi. Kunci sesi diturunkan lagi ketika data akan didekripsi.
Fungsi ini juga menambahkan Kode Autentikasi Pesan (MAC) (pemeriksaan integritas kunci) ke data terenkripsi untuk melindungi dari perubahan data.
Untuk mengenkripsi memori untuk penggunaan sementara dalam proses yang sama atau di seluruh proses, panggil fungsi CryptProtectMemory .
Contoh
Contoh berikut menunjukkan enkripsi data dalam struktur DATA_BLOB . Fungsi CryptProtectData melakukan enkripsi dengan menggunakan kunci sesi yang dibuat fungsi dengan menggunakan kredensial masuk pengguna. Untuk contoh lain yang menggunakan fungsi ini, lihat Contoh Program C: Menggunakan 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);
}
Persyaratan
Klien minimum yang didukung | Windows XP [aplikasi desktop | Aplikasi UWP] |
Server minimum yang didukung | Windows Server 2003 [aplikasi desktop | Aplikasi UWP] |
Target Platform | Windows |
Header | dpapi.h |
Pustaka | Crypt32.lib |
DLL | Crypt32.dll |