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的算法。

发错了。。。图片说明

http://blog.csdn.net/wzsy/article/details/14120853

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

代码能分享一下吧?

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

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

}

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