Fungsi CryptUnprotectMemory (dpapi.h)
Fungsi CryptUnprotectMemory mendekripsi memori yang dienkripsi menggunakan fungsi CryptProtectMemory .
Sintaks
DPAPI_IMP BOOL CryptUnprotectMemory(
[in, out] LPVOID pDataIn,
[in] DWORD cbDataIn,
[in] DWORD dwFlags
);
Parameter
[in, out] pDataIn
Penunjuk ke blok memori untuk didekripsi. Parameter cbData menentukan jumlah byte yang akan coba didekripsi oleh fungsi. Jika data yang terkandung dalam ruang memori lebih kecil dari jumlah byte yang ditentukan, fungsi akan mencoba mendekripsi data di luar blok yang dimaksudkan. Jika lebih besar dari byte cbData , maka hanya byte cbData pertama yang akan didekripsi.
[in] cbDataIn
Jumlah byte memori yang ditunjukkan oleh parameter pData untuk didekripsi. Jumlah byte harus kelipatan konstanta CRYPTPROTECTMEMORY_BLOCK_SIZE yang ditentukan dalam Wincrypt.h.
[in] dwFlags
Parameter ini bisa menjadi salah satu bendera berikut. Anda harus menentukan bendera yang sama saat mengenkripsi dan mendekripsi memori.
Mengembalikan nilai
Jika fungsi berhasil, fungsi mengembalikan TRUE.
Jika fungsi gagal, fungsi akan mengembalikan FALSE. Untuk informasi kesalahan yang diperluas, hubungi GetLastError.
Keterangan
Menggunakan CryptProtectMemory dan CryptUnprotectMemory untuk enkripsi kata sandi tidak aman karena data ada sebagai teks biasa dalam memori sebelum dienkripsi dan kapan saja pemanggil mendekripsinya untuk digunakan.
Anda harus mengenkripsi dan mendekripsi memori selama sesi boot yang sama. Jika komputer dimulai ulang sebelum Anda memanggil fungsi CryptUnprotectMemory , Anda tidak akan dapat mendekripsi data.
Anda harus meneruskan bendera yang sama ke CryptUnprotectMemory dan CryptProtectMemory. Jika Anda meneruskan bendera yang berbeda, fungsi CryptUnprotectMemory berhasil; namun, hasilnya tidak dapat diprediksi.
Setelah Anda selesai menggunakan informasi sensitif, bersihkan dari memori dengan memanggil fungsi SecureZeroMemory .
Contoh
Contoh berikut memanggil fungsi CryptUnprotectMemory untuk mendekripsi data yang ada di memori. Contoh mengasumsikan variabel pEncryptedText menunjuk ke string yang telah dienkripsi menggunakan fungsi CryptProtectMemory .
#include <windows.h>
#include <stdio.h>
#include <Wincrypt.h>
#include <strsafe.h>
#pragma comment(lib, "crypt32.lib")
void main()
{
LPWSTR pEncryptedText; // contains the encrypted text
DWORD cbEncryptedText; // number of bytes to which
// pEncryptedText points
if (CryptUnprotectMemory(pEncryptedText, cbEncryptedText,
CRYPTPROTECTMEMORY_SAME_PROCESS))
{
// Use the decrypted string.
}
else
{
wprintf(L"CryptUnprotectMemory failed: %d\n",
GetLastError());
}
// Clear and free memory after using
// the decrypted string or if an error occurs.
SecureZeroMemory(pEncryptedText, cbEncryptedText);
LocalFree(pEncryptedText);
pEncryptedText = NULL;
}
Persyaratan
Klien minimum yang didukung | Windows Vista [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 |