Windows RDP协议中对 Windows 用户密码加密库使用
远程桌面协议(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 用户密码加密库使用相关推荐
- C#中使用MD5对用户密码加密与解密
C#中常涉及到对用户密码的加密于解密的算法,其中使用MD5加密是最常见的的实现方式.本文总结了通用的算法并结合了自己的一点小经验,分享给大家. 一.使用16位.32位.64位MD5方法对用户名加密 1 ...
- WINCE中设置FTP用户密码
WINCE中设置FTP用户密码 WINCE中启用FTP,添加FTP组件,在注册表Platform.reg 里面加入以下内容 [HKEY_LOCAL_MACHINE\Comm\FTPD] " ...
- 用户密码加密存储十问十答,一文说透密码安全存储
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者 | 程序员赵鑫 来源 | cnblogs.com/xinzh ...
- [转]常见的用户密码加密方式以及破解方法
[作者]张辉,就职于携程技术中心信息安全部,负责安全产品的设计与研发. 作为互联网公司的信息安全从业人员经常要处理撞库扫号事件,产生撞库扫号的根本原因是一些企业发生了信息泄露事件,且这些泄露数据未加密 ...
- 使用MD5对用户密码加密与解密
MD5简介 : MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2.MD3和MD4发展 ...
- Edusoho修改注册的用户密码加密机制规则
一.简介 1.修改生成$salt的机制规则. 2.修改生成$password的机制规则. 二.edusoho的默认用户密码加密机制规则 1.系统默认生成$salt的方式: edusoho\src\Bi ...
- 常见的用户密码加密及破解方法
一.用户密码加密 用户密码保存到数据库时,常见的加密方式有哪些,我们该采用什么方式来保护用户的密码呢?以下几种方式是常见的密码保存方式: ① 直接明文保存,比如用户设置的密码是"123456 ...
- 新增用户-用户密码加密-无解密
新增用户-用户密码加密 加密方式 需求 做法 加密方式 加密方式有多种,如1加密后可解密得到原文得.2加密后无解密方式,只能通过加密密文比对得.本文采取得就是第2种无解密方式加密 需求 springb ...
- php+$2y$10,PHP 用户密码加密函数password_hash
PHP 用户密码加密函数password_hash PHP 用户密码加密函数password_hash 传统的用户名和密码都采用加盐的方式存储加密信息,盐值也需要存储. 自PHP5.5.0之后,新增加 ...
最新文章
- HBase总结(十一)hbase Java API 介绍及使用示例
- 【算法编程】斐波那契数列
- Http和Socket连接区别
- python中等高线填充颜色_Python matplotlib等高线图对数颜色
- inside uboot (五) DRAM的构成
- 46 MM配置-采购-条件-定价过程-定义方案组
- Magento教程 12:Magento快速上传大量商品的方法
- 使用公司邮箱名登录之PHP代码实现
- 用于编译cm-12.0 的 local_manifest.xml文件
- Ant—Ant标签解释
- 用eXeScope个性化自己的Win7
- 怎么批量重命名文件夹?
- 亿图图示----科学与软件展示
- uniapp从开发App到上架应用市场需要经历什么?
- 《Python数据分析与挖掘实战》学习笔记——电力漏窃电用户自动识别
- 2020 中国软件 100 强,腾讯第二、阿里第三,第一是谁呢?你们公司上榜了吗?
- QIIME 2教程. 06沙漠土壤分析AtacamaSoil(2021.2)
- 红图新媒体-完美的新媒体矩阵方案需要这样做
- Manacher回文串(板子总结)
- 滴滴(夜莺)Nightingale监控部署