如何在Java中加密RDP密码

时间:2012-08-17 01:46:19

标签: java rdp

我想生成具有自动登录功能的rdp文件,因此需要生成加密密码并填写rdp文件。

对于加密工具,我使用的是来自jna开源的Crypt32Util(我也试过DPAPI DataProtector,结果是一样的)。但结果不正确......

正如http://www.remkoweijnen.nl/blog/2007/10/18/how-rdp-passwords-are-encrypted/所指出的那样,字符串应该是unicode,这就是我在getBytes中使用'UTF-16LE'的原因(我也试过使用getBytes()和getBytes(“UTF-8”),没有人工作......)

真的很感谢你的帮助,让我有所帮助,谢谢!

以下是代码:

public String pwdEncrypt(String password){
    byte[] pwdBytes = null;
    try{
        pwdBytes = password.getBytes("UTF-16LE");
    }catch(Exception e){
        e.printStackTrace();
    }

    byte[] encryptedPwd = Crypt32Util.cryptProtectData(pwdBytes);       

    return String.valueOf(Hex.encodeHex(encryptedPwd));
}   

1 个答案:

答案 0 :(得分:1)

   String paasword ="pwd";
    DATA_BLOB pDataIn = new DATA_BLOB(password.getBytes(Charset.forName("UTF-16LE")));
    DATA_BLOB pDataEncrypted = new 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("password 51:b:"+ epwsb.toString());