Преобразование массива символов в массив байтов и обратно

Я ' m пытается преобразовать массив символов Java в массив байтов без создания промежуточной String , поскольку массив символов содержит пароль. Я просмотрел несколько методов, но все они, похоже, не работают:

char[] password = "password".toCharArray();

byte[] passwordBytes1 = new byte[password.length*2];
ByteBuffer.wrap(passwordBytes1).asCharBuffer().put(password);

byte[] passwordBytes2 = new byte[password.length*2];
for(int i=0; i<password.length; i++) {
    passwordBytes2[2*i] = (byte) ((password[i]&0xFF00)>>8); 
    passwordBytes2[2*i+1] = (byte) (password[i]&0x00FF); 
}

String passwordAsString = new String(password);
String passwordBytes1AsString = new String(passwordBytes1);
String passwordBytes2AsString = new String(passwordBytes2);

System.out.println(passwordAsString);
System.out.println(passwordBytes1AsString);
System.out.println(passwordBytes2AsString);
assertTrue(passwordAsString.equals(passwordBytes1) || passwordAsString.equals(passwordBytes2));

Утверждение всегда терпит неудачу (и, что особенно важно, когда код используется в производственной среде, пароль отклоняется), однако операторы печати распечатывают пароль три раза. Почему passwordBytes1AsString и passwordBytes2AsString отличаются от passwordAsString , но кажутся идентичными? Я упускаю нулевой терминатор или что-то в этом роде? Что я могу сделать, чтобы преобразование и неконверсия работали?

36
задан Scott 8 February 2011 в 10:25
поделиться