【发布时间】:2012-08-17 01:46:19
【问题描述】:
我想生成具有自动登录功能的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));
}
【问题讨论】:
-
UTF-16 与 Unicdoe 不同。如果您只使用 password.getBytes() 会发生什么?您应该能够将您的编码与您发布的博客文章中的测试程序的编码进行比较。
-
乔,谢谢!实际上我也尝试过使用 getBytes(),但结果也不起作用......我不确定 unicode 字节是如何在 C++ 或 Delphi 中组织的。我猜问题是输入 crypt API 的 pwdBytes 不正确,但不知道如何比较和修复......