分享

RDP密码加密算法

 左目右于 2012-05-07

RDP密码加密算法

2012-03-08

无事瞎搞,希望做个工具自动远程登录,简单看了下,Windows远程登录使用的是RDP.exe,该文件关联一个rdp后缀的文件,rdp文件仅仅为简单的配置文件,相信大家用rdp之后,在我的文档里面可以看到,用文本编辑器打开看看,很简单,我就不说明啦。

这里面最要紧的是对密码的加密,看了半天都不太像常用的加密方式,什么MD5,SHA,CRC,BASE64等等。而且貌似字符串很长的样子,好,我们需要重点关注如何生成这个字符串。原来WinAPI中已经有加解密的函数来,一个函数就可以搞定,这下就可以随心所欲的生产远程登录配置文件啦。

MSDN定义如下:

C++
1
2
3
4
5
6
7
8
9
BOOL WINAPI CryptProtectData(
DATA_BLOB* pDataIn,
LPCWSTR szDataDescr,
DATA_BLOB* pOptionalEntropy,
PVOID pvReserved,
CRYPTPROTECT_PROMPTSTRUCT* pPromptStruct,
DWORD dwFlags,
DATA_BLOB* pDataOut
);

以下是简单的测试源码,相信运行下就明白啦,MSDN例子里面没有说明宽字符等问题

C++
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
34
35
void main()
{
DATA_BLOB DataIn;
DATA_BLOB DataOut;
// mstsc.exe中使用的是unicode,所以必须做宽字符转换
BYTE *pbDataInput =(BYTE *)L"freedom";
DWORD cbDataInput = wcslen(L"freedom")*sizeof(wchar_t);
DataIn.pbData = pbDataInput;
DataIn.cbData = cbDataInput;
if(CryptProtectData(&DataIn,L"password", // A description string
//to be included with the
// encrypted data.
NULL, // Optional entropy not used.
NULL, // Reserved.
NULL, // Pass NULL for the
// prompt structure.
0,
&DataOut))
{
printf("The encryption phase worked.\n");
int count=0;
while(count // 因为一个unsigned int 占32位
// 转换成成16进制要占两位
// 所以这里需要用%02
printf("%02X",DataOut.pbData[count]);
count++;
}
else
{
printf("Encryption error using CryptProtectData.\n");
return -1;
}
}

貌似没贴头文件,添加下Wincrypt.h就可以啦^_^

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多