求java对rdp文件中密码的加密算法,不是做好的可执行.exe。

月明星稀灬 2015-11-27 10:05:26
主要为了实现,直接在表单中修改文件。实现动态配置对应电脑的远程桌面连接参数,文件中只有密码是需要加密的。 找了很多地方都没有找到,求虐,求知道。

服务端 远程客户端 然后远程的时候希望点击直接进去,参数是配置在这个文件(主要文件中是只有密码是加密的), 如果客户端电脑修改密码了,服务器这个配置文件就需要更新参数.不可能让客户, 自己拿一个第三方exe对密码进行加密,然后还要他来直接操作文件更新配置参数(密码)
配置文件下图:


已知http://blog.csdn.net/wzsy/article/details/14120853这里给出了C++的RDP算法,
问:如何转化为JAVA方法,或者如何用Java调用这个函数,或者JAVA---JNI----C++交互,C++的环境又是怎么样(配置哪些东西,环境,安装什么软件,需要什么库)的,求大神。




...全文
324 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
月明星稀灬 2017-09-21
这个问题我已经解决了,你到技术问答里面看下,每次加密不一样是对的,这里我用到了JNI调用底层加密方法。
回复
月明星稀灬 2017-09-21
引用 5 楼 hy2012_campus 的回复:
我现在在作同样的一个功能,但是 public static void main(String[] args) { String password = "engine"; WinCrypt.DATA_BLOB pDataIn = new WinCrypt.DATA_BLOB(password.getBytes(Charset.forName("UTF-16LE"))); WinCrypt.DATA_BLOB pDataEncrypted = new WinCrypt.DATA_BLOB(); System.out.println(Crypt32.INSTANCE.CryptProtectData(pDataIn, "psw", null, null, null, WinCrypt.CRYPTPROTECT_UI_FORBIDDEN, pDataEncrypted)); StringBuffer epwsb = new StringBuffer(); byte[] pwdBytes = new byte[pDataEncrypted.cbData]; pwdBytes = pDataEncrypted.getData(); Formatter formatter = new Formatter(epwsb); for (final byte b : pwdBytes) { formatter.format("%02X", b); } System.out.println(epwsb.toString()); System.out.println("----------------------------------------"); System.out.println(cryptRdpPassword("engine")); } private static String ToHexString(byte[] bytes) { StringBuilder sb = new StringBuilder(); Formatter formatter = new Formatter(sb); for (byte b : bytes) { formatter.format("%02x", b); } formatter.close(); return sb.toString(); } private static String cryptRdpPassword(String pwd) { try { return ToHexString(Crypt32Util.cryptProtectData(pwd.getBytes("UTF-16LE"), null, 0, "psw", null)); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return "ERROR"; } } 每次算出来的加密后的密码都是不一样??? 你的这个问题解决了吗? 求解?
对的,每次都不一样
回复
打鱼晒网 2017-09-04
我现在在作同样的一个功能,但是

public static void main(String[] args) {

String password = "engine";
WinCrypt.DATA_BLOB pDataIn = new WinCrypt.DATA_BLOB(password.getBytes(Charset.forName("UTF-16LE")));
WinCrypt.DATA_BLOB pDataEncrypted = new WinCrypt.DATA_BLOB();
System.out.println(Crypt32.INSTANCE.CryptProtectData(pDataIn, "psw", null, null, null, WinCrypt.CRYPTPROTECT_UI_FORBIDDEN, pDataEncrypted));
StringBuffer epwsb = new StringBuffer();
byte[] pwdBytes = new byte[pDataEncrypted.cbData];
pwdBytes = pDataEncrypted.getData();
Formatter formatter = new Formatter(epwsb);
for (final byte b : pwdBytes) {
formatter.format("%02X", b);
}
System.out.println(epwsb.toString());


System.out.println("----------------------------------------");

System.out.println(cryptRdpPassword("engine"));
}


private static String ToHexString(byte[] bytes) {
StringBuilder sb = new StringBuilder();
Formatter formatter = new Formatter(sb);
for (byte b : bytes) {
formatter.format("%02x", b);
}
formatter.close();
return sb.toString();
}

private static String cryptRdpPassword(String pwd) {
try {
return ToHexString(Crypt32Util.cryptProtectData(pwd.getBytes("UTF-16LE"), null, 0, "psw", null));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
return "ERROR";
}
}


每次算出来的加密后的密码都是不一样??? 你的这个问题解决了吗? 求解?
回复
自由的刺猬 2015-12-03
没遇到过这种问题
回复
月明星稀灬 2015-11-27
引用 1 楼 shijing266 的回复:
谁给你的这个文件,让他提供生成和解析方法
准确来说WINDOWS,给的。
回复
月明星稀灬 2015-11-27
这个是在远程连接的时候,点击保存会生成的,原文件是Default.rdp,但是文件里面没有密码这个参数。 没有密码调远程的时候就会要求输入密码。 密码属性是可以有的,不过只能放密文。现在这个是我通过第三方exe生成之后,我手动加进去的。 有这个参数在我添加进去之后,可以在远程连接的时候,直接读进去,不需要输入密码。 我这里有多个电脑需要通过WEB页面的按钮点击进去,每次都输入对应电脑的密码,不现实。 想通过把帐号密码直接存数据库,然后在web页面更改,直接更改文件,然后当客户端修改密码时,他就可以直接登入web端修改这个属性。 因为好像底层是C++的算法,一直没找到JAVA加密RDP的算法。
回复
相关推荐
发帖
Web 开发
创建于2007-09-28

8.0w+

社区成员

Java Web 开发
申请成为版主
帖子事件
创建了帖子
2015-11-27 10:05
社区公告
暂无公告