远程桌面协议(RDP, Remote Desktop Protocol)是一个多通道(multi-channel)的协议,让用户(客户端或称“本地电脑”)连上提供微软终端机服务的电脑(服务器端或称“远程电脑”)。大部分的Windows都有客户端所需软件。其他操作系统也有这些客户端软件,例如Linux、FreeBSD、Mac OS X。服务端电脑方面,则听取送到TCP3389端口的数据。(百度百科)

最近在公司的项目中使用到 RDP 协议,需要对当前用户的密码加密然后写入 *.rdp 文件密码位置,因此对使用加密库作此记录以方便日后使用。编写的源代码如下:

头文件和库
        #include <windows.h>
        #include <Wincrypt.h>
        #pragma comment(lib, "crypt32.lib")

/* RDP用户密码 */
        char *password = "123456789";

/* 对密码进行加密 */
        DATA_BLOB DataIn;
        DATA_BLOB DataOut;
        // mstsc.exe中使用的是unicode,所以必须做宽字符转换
        BYTE *pbDataInput = (BYTE *)char2wchar(password);
        DWORD cbDataInput = wcslen(char2wchar(password)) * 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))
        {
            /* 加密后转换成 string 的密码 */
            std::string *out_string = byteToHexStr(DataOut.pbData, DataOut.cbData);

/* 读取 RDP 配置文件并修改加密后的登录密码 */
            read_rdp_settings_file(file_name, *out_string);

/* 释放保存 RDP 密码的内存空间 */
            delete out_string;
            out_string = nullptr;
        }

/* byte 数组转16进制 string 字符串 */
string* byteToHexStr(unsigned char byte_arr[], int arr_len)

{
    string* hexstr = new string();

for (int i = 0; i < arr_len; i++)
    {

char hex1;

char hex2;

/*借助C++支持的unsigned和int的强制转换,把unsigned char赋值给int的值,那么系统就会自动完成强制转换*/

int value = byte_arr[i];

int S = value / 16;

int Y = value % 16;

//将C++中unsigned char和int的强制转换得到的商转成字母

if (S >= 0 && S <= 9)

hex1 = (char)(48 + S);

else

hex1 = (char)(55 + S);

//将C++中unsigned char和int的强制转换得到的余数转成字母

if (Y >= 0 && Y <= 9)

hex2 = (char)(48 + Y);

else

hex2 = (char)(55 + Y);

//最后一步的代码实现,将所得到的两个字母连接成字符串达到目的

*hexstr = *hexstr + hex1 + hex2;

}

return hexstr;
}

/* char 字符串转转成宽字符串 */
wchar_t * char2wchar(const char* cchar)
{
    wchar_t *m_wchar;
    int len = MultiByteToWideChar(CP_ACP, 0, cchar, strlen(cchar), NULL, 0);
    m_wchar = new wchar_t[len + 1];
    MultiByteToWideChar(CP_ACP, 0, cchar, strlen(cchar), m_wchar, len);
    m_wchar[len] = '\0';
    return m_wchar;
}

Windows RDP协议中对 Windows 用户密码加密库使用相关推荐

  1. C#中使用MD5对用户密码加密与解密

    C#中常涉及到对用户密码的加密于解密的算法,其中使用MD5加密是最常见的的实现方式.本文总结了通用的算法并结合了自己的一点小经验,分享给大家. 一.使用16位.32位.64位MD5方法对用户名加密 1 ...

  2. WINCE中设置FTP用户密码

    WINCE中设置FTP用户密码 WINCE中启用FTP,添加FTP组件,在注册表Platform.reg 里面加入以下内容 [HKEY_LOCAL_MACHINE\Comm\FTPD]  " ...

  3. 用户密码加密存储十问十答,一文说透密码安全存储

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者 | 程序员赵鑫 来源 | cnblogs.com/xinzh ...

  4. [转]常见的用户密码加密方式以及破解方法

    [作者]张辉,就职于携程技术中心信息安全部,负责安全产品的设计与研发. 作为互联网公司的信息安全从业人员经常要处理撞库扫号事件,产生撞库扫号的根本原因是一些企业发生了信息泄露事件,且这些泄露数据未加密 ...

  5. 使用MD5对用户密码加密与解密

    MD5简介 : MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2.MD3和MD4发展 ...

  6. Edusoho修改注册的用户密码加密机制规则

    一.简介 1.修改生成$salt的机制规则. 2.修改生成$password的机制规则. 二.edusoho的默认用户密码加密机制规则 1.系统默认生成$salt的方式: edusoho\src\Bi ...

  7. 常见的用户密码加密及破解方法

    一.用户密码加密 用户密码保存到数据库时,常见的加密方式有哪些,我们该采用什么方式来保护用户的密码呢?以下几种方式是常见的密码保存方式: ① 直接明文保存,比如用户设置的密码是"123456 ...

  8. 新增用户-用户密码加密-无解密

    新增用户-用户密码加密 加密方式 需求 做法 加密方式 加密方式有多种,如1加密后可解密得到原文得.2加密后无解密方式,只能通过加密密文比对得.本文采取得就是第2种无解密方式加密 需求 springb ...

  9. php+$2y$10,PHP 用户密码加密函数password_hash

    PHP 用户密码加密函数password_hash PHP 用户密码加密函数password_hash 传统的用户名和密码都采用加盐的方式存储加密信息,盐值也需要存储. 自PHP5.5.0之后,新增加 ...

最新文章

  1. HBase总结(十一)hbase Java API 介绍及使用示例
  2. 【算法编程】斐波那契数列
  3. Http和Socket连接区别
  4. python中等高线填充颜色_Python matplotlib等高线图对数颜色
  5. inside uboot (五) DRAM的构成
  6. 46 MM配置-采购-条件-定价过程-定义方案组
  7. Magento教程 12:Magento快速上传大量商品的方法
  8. 使用公司邮箱名登录之PHP代码实现
  9. 用于编译cm-12.0 的 local_manifest.xml文件
  10. Ant—Ant标签解释
  11. 用eXeScope个性化自己的Win7
  12. 怎么批量重命名文件夹?
  13. 亿图图示----科学与软件展示
  14. uniapp从开发App到上架应用市场需要经历什么?
  15. 《Python数据分析与挖掘实战》学习笔记——电力漏窃电用户自动识别
  16. 2020 中国软件 100 强,腾讯第二、阿里第三,第一是谁呢?你们公司上榜了吗?
  17. QIIME 2教程. 06沙漠土壤分析AtacamaSoil(2021.2)
  18. 红图新媒体-完美的新媒体矩阵方案需要这样做
  19. Manacher回文串(板子总结)
  20. 滴滴(夜莺)Nightingale监控部署

热门文章

  1. 木球竞赛抽签计分系统_桌面应用
  2. (附源码)小程序 法律全书的开发毕业设计280844
  3. Kotlin高阶函数
  4. ERROR RC.EXE 已退出(退出代码01)解决方法
  5. onblur和onclick冲突的解决方法
  6. ensp三层交换机和VLANIF配置
  7. MS计算界面相互作用
  8. 3岁以下婴幼儿照护个人所得税专项附加扣除
  9. tp5.1 使用apidoc
  10. 【光感自动窗帘控制系统设计】