最近在做一个远程桌面连接自动填充用户名和密码的功能,发现获取不了Windows 安全中心的子控件,找到可以通过编辑rdp文件来实现。但里面的密码必须是rdp加密的,查了一下发现有官方API,整理了一下,做个记录。
int main()
{
DATA_BLOB DataIn;
DATA_BLOB DataOut;
// mstsc.exe中使用的是unicode,所以必须做宽字符转换
BYTE * pbDataInput = (BYTE *)L"password";
DWORD cbDataInput = wcslen(L"password") * sizeof(wchar_t);
DataIn.pbData = pbDataInput;
DataIn.cbData = cbDataInput;
if (CryptProtectData(&DataIn, (LPCWSTR)"password", NULL, NULL, NULL, 0, &DataOut))
{
printf("The encryption phase worked.\n");
int count = 0;
while (count <= (int)DataOut.cbData)
{
printf("%02X", DataOut.pbData[count]);
count++;
}
}
else
{
printf("Encryption error using CryptProtectData.\n");
return -1;
}
return 0;
}
加密后放到rdp.exe验证没有问题,解密算法可以依靠CryptUnprotectData。