月明星稀灬
2015-11-27 03:53
采纳率: 100%
浏览 2.2k
已采纳

JAVA调用C++函数进行rdp加密

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

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

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

这个是在远程连接的时候,点击保存会生成的,原文件是Default.rdp,但是文件里面没有密码这个参数。
没有密码调远程的时候就会要求输入密码。
密码属性是可以有的,不过只能放密文。现在这个是我通过第三方exe生成之后,我手动加进去的。
有这个参数在我添加进去之后,可以在远程连接的时候,直接读进去,不需要输入密码。
我这里有多个电脑需要通过WEB页面的按钮点击进去,每次都输入对应电脑的密码,不现实。

想通过把帐号密码直接存数据库,然后在web页面更改,直接更改文件,然后当客户端修改密码时,他就可以直接登入web端修改这个属性。

因为好像底层是C++的算法,一直没找到JAVA加密RDP的算法。

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • 月明星稀灬 2015-12-01 12:36
    已采纳

    发错了。。。图片说明

    打赏 评论
  • devmiao 2015-11-28 21:49
    打赏 评论
  • 月明星稀灬 2015-12-01 12:35

    最后的解决办法,就是下载了两个jar包一个 是jna 4.2.1.jar 还有一个jna-platform-4.2.1.jar
    图片说明

    打赏 评论
  • -风月无边- 2018-07-13 10:02

    代码能分享一下吧?

    下面的每次加密的密码不一样啊。

    import com.sun.jna.*;

    import com.sun.jna.platform.win32.*;

    import java.util.Formatter;
    import java.io.UnsupportedEncodingException;
    import java.nio.charset.Charset;
    public class RDP {

    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";
        }
    }
    

    }

    打赏 评论
  • -风月无边- 2018-07-20 01:14

    OK,找到解释了,和什么salt有关了。谢谢。

    打赏 评论

相关推荐 更多相似问题