I am using the following code, but it’s not working.
String source = "password"; byte[] byteArray = source.getBytes("UTF-16"); Base64 bs = new Base64(); //bs.encodeBytes(byteArray); System.out.println(bs.encodeBytes(byteArray)); //bs.decode(bs.encodeBytes(byteArray)); System.out.println(bs.decode(bs.encodeBytes(byteArray)));
Advertisement
Answer
First:
- Choose an encoding. UTF-8 is generally a good choice; stick to an encoding which will definitely be valid on both sides. It would be rare to use something other than UTF-8 or UTF-16.
Transmitting end:
- Encode the string to bytes (e.g.
text.getBytes(encodingName)
) - Encode the bytes to base64 using the
Base64
class - Transmit the base64
Receiving end:
- Receive the base64
- Decode the base64 to bytes using the
Base64
class - Decode the bytes to a string (e.g.
new String(bytes, encodingName)
)
So something like:
// Sending side byte[] data = text.getBytes("UTF-8"); String base64 = Base64.encodeToString(data, Base64.DEFAULT); // Receiving side byte[] data = Base64.decode(base64, Base64.DEFAULT); String text = new String(data, "UTF-8");
Or with StandardCharsets
:
// Sending side byte[] data = text.getBytes(StandardCharsets.UTF_8); String base64 = Base64.encodeToString(data, Base64.DEFAULT); // Receiving side byte[] data = Base64.decode(base64, Base64.DEFAULT); String text = new String(data, StandardCharsets.UTF_8);