数据加解密(基于CryptUnProtectData/ProtectData)

导入依赖文件

1
2
3
4
5
#include <Windows.h>
#include <iostream>
#pragma comment(lib,"crypt32.lib")

using namespace std;

CryptProtectData()CryptUnprotectData()Windows.h头文件下,且函数依赖于crypt32.lib静态链接文件,使用前需将其都导入项目中。

加解密测试

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
void cryptTest(){
char* ConstSTR = (char*)"Hello World!";
DATA_BLOB InputData, OutputData;
DATA_BLOB CryptData, DecryptData;

InputData.pbData = (BYTE*)ConstSTR;
InputData.cbData = strlen(ConstSTR) + 1;
if (CryptProtectData(&InputData, NULL, NULL, NULL, NULL, NULL, &OutputData)) {
CryptData = OutputData;
cout << "The CryptData is: " << OutputData.pbData << endl;
if (CryptUnprotectData(&CryptData, NULL, NULL, NULL, NULL, NULL, &DecryptData)) {
cout << "The DecryptData is: " << DecryptData.pbData << endl;
}
else {
cout << "Decrypt failed." << endl;
}
}
else {
cout << "Crypt failed." << endl;
}
}

int main(int argc, char* argv[])
{
cout << "==============================================================" << endl;
cryptTest();
return 0;
}

​ 加密的测试数据为“Hello World!”,上述函数的加密基于DATA_BLOB数据类型,其中pbData存储字节类型的数据,cbData为数据长度,且C++中BYTE*类型其实为unsigned char*类型,其长度比char*长一(多一个'\0')。

0%