赞
踩
无事瞎搞,希望做个工具自动远程登录,简单看了下,Windows远程登录使用的是RDP.exe,该文件关联一个rdp后缀的文件,rdp文件仅仅为简单的配置文件,相信大家用rdp之后,在我的文档里面可以看到,用文本编辑器打开看看,很简单,我就不说明啦。
这里面最要紧的是对密码的加密,看了半天都不太像常用的加密方式,什么MD5,SHA,CRC,BASE64等等。而且貌似字符串很长的样子,好,我们需要重点关注如何生成这个字符串。原来WinAPI中已经有加解密的函数来,一个函数就可以搞定,这下就可以随心所欲的生产远程登录配置文件啦。
MSDN定义如下:
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例子里面没有说明宽字符等问题
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
;
}
}
|
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。