La conversion char tableau en tableau d'octets et de retour à nouveau

Je suis à la recherche pour convertir un Java char tableau dans un tableau d'octets sans la création d'un intermédiaire String, comme le char tableau contient un mot de passe. J'ai regardé un couple de méthodes, mais ils semblent tous à l'échec:

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));

L'assertion échoue toujours (et, de façon critique, lorsque le code est utilisé dans la production, le mot de passe est rejeté), mais les instructions d'impression, d'imprimer le mot de passe trois fois. Pourquoi passwordBytes1AsString et passwordBytes2AsString différente de passwordAsString, pourtant, semblent identiques? Ai-je raté un terminateur null ou quelque chose? Que puis-je faire pour faire la conversion et unconversion travail?

  • Pourquoi voulez-Vous éviter de créer un intermédiaire de la Chaîne?
  • Soleil le recommande en tant que meilleure pratique: download.oracle.com/javase/1.5.0/docs/guide/security/jce/... les Chaînes de caractères sont immuables, et ne peut donc pas être remis à zéro, comme des tableaux de char - au lieu de cela, votre mot de passe traîne dans la mémoire pour une période de temps indéterminée.
InformationsquelleAutor Scott | 2011-02-08