I want to convert a Java char array to a byte array without creating an intermediate String,since the char array contains a password. I've used a couple of methods, but they all found useless :
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));
The assertion always fails (and, critically, when the code is used in production, the password is rejected), yet the print statements print out password three times. Why are passwordBytes1AsString and passwordBytes2AsString different from passwordAsString, yet appear identical? Am I missing out a null terminator or something? What can I do to make the conversion and unconversion work?
Aryan Kumar
27-Jun-2023Sure, here is how to convert a char array to a byte array and back again to a char array:
Code snippet
In this code, we first create a char array with the string "Hello, world!". Then, we use the
StandardCharsets.UTF_8.encode()
method to convert the char array to a byte array. TheStandardCharsets.UTF_8.encode()
method takes a char array as input and returns a byte array. The byte array contains the UTF-8 encoding of the char array.Next, we use the
StandardCharsets.UTF_8.decode()
method to convert the byte array back to a char array. TheStandardCharsets.UTF_8.decode()
method takes a byte array as input and returns a char array. The char array contains the characters that were encoded in the byte array.Finally, we print the new char array.
Anonymous User
14-Jan-2016