我在我的應用程式中使用CryptProtectData()和CryptUnprotectData()API 進行資料加密和解密。
閱讀API 檔案,不清楚為什么LocalFree()需要在使用后針對輸出緩沖區呼叫。該頁面上的示例代碼未呼叫LocalFree(),這是未命中嗎?
檔案中還缺少什么(這個問題的主要原因)是,DATA_BLOB::pbDataDPAPI 管理的輸出如何?我可以自己管理輸出緩沖區的記憶體嗎?如果可以,我如何提前知道加密資料的輸出緩沖區大小,以便我可以分配足夠大的緩沖區供CryptProtectData()或CryptUnprotectData()使用?
這是關于我如何使用的代碼片段CryptProtectData():
DATA_BLOB dataIn;
DATA_BLOB dataOut;
dataIn.pbData = (BYTE *)"Hello world";
dataIn.cbData = (DWORD)strlen((char*)pbDataInput);
if(CryptProtectData(&dataIn, NULL, NULL, NULL, NULL, 0, &dataOut))
{
printf("Encrypted data size: %d", dataOut.cbData);
// LocalFree(dataOut.pbData); // Is this needed? Why? How do I manage dataOut.pbData by myself?
}
uj5u.com熱心網友回復:
閱讀 API 檔案,不清楚為什么
LocalFree()需要在使用后針對輸出緩沖區呼叫。
因為CryptProtectData()動態分配一個輸出緩沖區并提供給您,所以您需要在使用完后釋放它。
該頁面上的示例代碼未呼叫
LocalFree(),這是未命中嗎?
是的。
DATA_BLOB::pbDataDPAPI 管理的輸出如何?我可以自己管理輸出緩沖區的記憶體嗎?
不CryptProtectData(),不。您必須使用它給您的緩沖區。
如果您想使用自己的緩沖區,請CryptProtectMemory()改用。
如果可以,我如何提前知道加密資料的輸出緩沖區大小,以便我可以分配足夠大的緩沖區供
CryptProtectData()或CryptUnprotectData()使用?
CryptProtectData() 在分配動態輸出緩沖區時為您處理。
CryptProtectMemory()行內加密,對輸入和輸出使用相同的緩沖區。因此,您有責任確保緩沖區足夠大以容納輸出。它的檔案說:
[in] cbDataIn
pData要加密的引數指向的記憶體位元組數。位元組數必須是CRYPTPROTECTMEMORY_BLOCK_SIZEWincrypt.h 中定義的常量的倍數。
因此,您只需取輸入資料的大小并將其四舍五入為塊大小的下一個倍數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/336458.html
