CryptUnprotectData

CryptUnprotectData()

CryptUnprotectData function

1) 介绍

cryptUnprotectData函数对DATA_BLOB结构中的数据进行解密并进行完整性检查。唯一可以解密数据的用户是具有与加密数据的用户相同的登录凭据的用户。另外,加密和解密必须在同一台计算机上完成。

2) 用法

1
2
3
4
5
6
7
8
9
BOOL WINAPI CryptUnprotectData(
_In_ DATA_BLOB *pDataIn,
_Out_opt_ LPWSTR *ppszDataDescr,
_In_opt_ DATA_BLOB *pOptionalEntropy,
_Reserved_ PVOID pvReserved,
_In_opt_ CRYPTPROTECT_PROMPTSTRUCT *pPromptStruct,
_In_ DWORD dwFlags,
_Out_ DATA_BLOB *pDataOut
);

3) 参数

pDataIn [in]
DATA_BLOB结构的密文指针,其中DATA_BLOB结构的pbData保存密文字节字符串,cbData保存密文字节字符串长度。
ppszDataDescr [out, optional]
指向密文中加密数据描述的指针,可以设置为NULL,可以通过调用LocalFree函数来释放ppszDataDescr。
pOptionalEntropy [in, optional]
DATA_BLOB结构的指针,包含的数据为加密时使用的密码或者其它Key,可以设置为NULL,但加密时如果设置了此值,解密时必须设置相同值。详细密码保护信息参考Handling Passwords。
pvReserved
保留参数,以供以后需要时使用,必须设置为NULL。
dwFlags [in]

pDataOut [out]
DATA_BLOB结构的明文指针,其中DATA_BLOB结构的pbData保存明文字符串,cbData保存明文字符串长度。

4) 返回值

如果成功返回TRUE,否则返回FALSE。

5) 例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// Decrypt data from DATA_BLOB DataOut to DATA_BLOB DataVerify.

//--------------------------------------------------------------------
// Declare and initialize variables.

DATA_BLOB DataOut;
DATA_BLOB DataVerify;
LPWSTR pDescrOut = NULL;
//--------------------------------------------------------------------
// The buffer DataOut would be created using the CryptProtectData
// function. If may have been read in from a file.

//--------------------------------------------------------------------
// Begin unprotect phase.

if (CryptUnprotectData(
&DataOut,
&pDescrOut,
NULL, // Optional entropy
NULL, // Reserved
NULL, // Here, the optional
// prompt structure is not
// used.
0,
&DataVerify))
{
printf("The decrypted data is: %s\n", DataVerify.pbData);
printf("The description of the data was: %s\n",pDescrOut);
}
else
{
printf("Decryption error!");
}

6) 运行要求