2013-06-30 3 views
1

Я уже попробовал еще решения от SO, такие как:Зашифровать пароль RDP с Java

String password ="pwd"; 
     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("password 51:b:"+ epwsb.toString()); 

или

Crypt32Util.cryptProtectData("12345".getBytes("UTF-16LE"), null, 0, "psw", null); 

Но все они дают разные результаты каждый раз я бегу их , и они не соответствуют реальному паролю, который был сохранен MSTSC или сгенерирован утилитой RGB Password Hasher. Кто-нибудь знает решение или CLI-утилиту, которая может шифровать пароль?

+0

«все они дают разные результаты каждый раз, когда я запускаю их» <- вы уверены, что не производите a_hash_ этого пароля, а не зашифрованной формы? Если это хэш, то вполне нормально, что со временем это может измениться, этот хэш солен ... – fge

ответ

1

Вот мой рабочий раствор (вам нужна ЮНА платформа, чтобы получить эту работу):

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 String cryptRdpPassword(String pass) { 
     try { 
      return ToHexString(Crypt32Util.cryptProtectData(pass.getBytes("UTF-16LE"), null, 0, "psw", null)); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
      return "ERROR"; 
     } 
    } 
Смежные вопросы