使用CryptProtectData生成的密码系统(远程桌面)不认识

蒙飞鸿 2010-11-02 05:18:19
使用了这个API生成了RDP(远程桌面)文件里面的密码,如果用CryptUnprotectData来还原是能的到明文的。
但是把这密码写到RDP文件里面,却不能进行远程桌面连接,就是报象密码错误那样的错误。
...全文
398 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
蒙飞鸿 2010-11-03
  • 打赏
  • 举报
回复
结贴 ,是字符编码(多字节、UNICODE)的问题。
蒙飞鸿 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jennyvenus 的回复:]
你的两台机器的密钥一样吗?你自己加密解密正确只是在一台机器上试验了。
[/Quote]
都是在一台机器上做的这些试验
用户 昵称 2010-11-02
  • 打赏
  • 举报
回复
你的两台机器的密钥一样吗?你自己加密解密正确只是在一台机器上试验了。
蒙飞鸿 2010-11-02
  • 打赏
  • 举报
回复
while ( count <= (int)DataOut.cbData )这个应该是有问题,把<=改为<,也一样。
蒙飞鸿 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jennyvenus 的回复:]
密钥可能没对上。
[/Quote]
啥意思,不太明白。
我生成密码的代码如下:
MakeUdpPsw(char * dest,char * sour) //必须确保dest的空间足够(一般大于500)
{
DATA_BLOB DataIn;
DATA_BLOB DataOut;
BYTE *pbDataInput =(BYTE *)sour;
DWORD cbDataInput =strlen(sour)*sizeof(char);

DataIn.pbData = pbDataInput;
DataIn.cbData = cbDataInput;



if(CryptProtectData(
&DataIn,
L"psw", // 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 <= (int)DataOut.cbData )
{
// 因为一个unsigned int 占32位
// 转换成成16进制要占两位
// 所以这里需要用%02
char t[3] = {0};
sprintf(t,"%02X",DataOut.pbData[count]);

printf("%02X",DataOut.pbData[count]);
strcat(dest,t);
count++;
}
return TRUE;
}
else
{
return FALSE;
}

}
用户 昵称 2010-11-02
  • 打赏
  • 举报
回复
密钥可能没对上。

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧