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 sont - passwordBytes1AsString
et passwordBytes2AsString
différent de passwordAsString
, mais semblent identiques? Ai-je raté un terminateur null ou quelque chose? Que puis-je faire pour faire la conversion et unconversion travail?