【发布时间】:2021-12-11 10:03:43
【问题描述】:
我在我的应用程序中使用CryptProtectData() 和CryptUnprotectData() API 进行数据加密和解密。
阅读API documentation,不清楚为什么在使用后需要针对输出缓冲区调用LocalFree()。该页面上的示例代码没有调用LocalFree(),这是一个失误吗?
文档中还缺少什么(这个问题的主要原因)是,DATA_BLOB::pbData 是如何由 DPAPI 管理的输出的?我可以自己管理输出缓冲区的内存吗?如果可以,如何提前知道加密数据的输出缓冲区大小,以便分配足够大的缓冲区供CryptProtectData()或CryptUnprotectData()使用?
这是我如何使用CryptProtectData() 的代码 sn-p:
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?
}
【问题讨论】:
标签: c++ windows security dpapi