Is there a base-64 decoder and encoder for a String in Android?
Asked
Active
Viewed 9.6k times
6 Answers
77
This is an example of how to use the Base64
class to encode and decode a simple String value.
// String to be encoded with Base64
String text = "Test";
// Sending side
byte[] data = null;
try {
data = text.getBytes("UTF-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
String base64 = Base64.encodeToString(data, Base64.DEFAULT);
// Receiving side
byte[] data1 = Base64.decode(base64, Base64.DEFAULT);
String text1 = null;
try {
text1 = new String(data1, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
This excerpt can be included in an Android activity.

blackpanther
- 10,998
- 11
- 48
- 78
-
13using `Base64.DEFAULT` will insert a line break in my case. I use `Base64.NO_WRAP` instead. – Arvin Dec 18 '13 at 08:48
-
The only one which works for me with 2 bytes characters. – Jerry Jul 03 '18 at 18:14
33
It seems that this was added in API version 8 or android 2.2 so it will not be available on the older platforms.
But the source of it is at android/util/Base64.java
so if needed one could just copy it unchanged for older versions.
-
encoded Base64 of Mw== is TXc9PQ== But this source code show TXc9PQo= What's wrong?! :-o – Dr.jacky Aug 01 '14 at 12:10
-
2
-
3Yea, and to solve it, we should use Base64.NO_WRAP for flag in encodeToString function, instead of Base64.DEFAULT. – Dr.jacky Aug 02 '14 at 08:30
-
hi have Base64.class but its having an error "$assertionsDisabled cannot be resolved to a variable" – Prasad Sep 13 '14 at 06:27
13
Here is a simple method I was going to use until I realized that this is only supported in Android API 8+:
// Has line break
public String getBase64(String input) {
return Base64.encodeToString(input.getBytes(), Base64.DEFAULT);
}
// No line break
public String getBase64(String input) {
return Base64.encodeToString(input.getBytes(), Base64.NO_WRAP);
}

Jared Burrows
- 54,294
- 25
- 151
- 185
-
as @arvin commented above: "using Base64.DEFAULT will insert a line break in my case. I use Base64.NO_WRAP instead." – AbdulMomen عبدالمؤمن Jun 30 '15 at 09:27
12
To encode:
private String encodeString(String s) {
byte[] data = new byte[0];
try {
data = s.getBytes("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} finally {
String base64Encoded = Base64.encodeToString(data, Base64.DEFAULT);
return base64Encoded;
}
}
To decode:
private String decodeString(String encoded) {
byte[] dataDec = Base64.decode(encoded, Base64.DEFAULT);
String decodedString = "";
try {
decodedString = new String(dataDec, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} finally {
return decodedString;
}
}
Example
String text = "example007";
Log.e("encoded", encodeString(text)); //Output: ZXhhbXBsZTAwNw==
Log.e("decoded", decodeString(encodeString(text))); //Output: example007

CommonSenseCode
- 23,522
- 33
- 131
- 186
5
If you don't want a line break at the end of the String, change the flags from Base64.DEFAULT
to Base64.NO_WRAP
Base64.encodeToString("yourString".getBytes("UTF-8"), Base64.NO_WRAP);

Hugo Gresse
- 17,195
- 9
- 77
- 119
0
Kotlin supports Base64 for versions 1.8.20 and over. It has 3 types available which are Base64.Default, Base64.UrlSafe and Base64.Mime.
// Base64.Default
val nameBytes = "Nav".map { it.code.toByte() }.toByteArray()
val encodedValue = Base64.Default.encode(nameBytes)
// Encode value: TmF2
println("Encoded: $encodedValue")
// Decoded value: Nav
println("Decoded: ${String(Base64.Default.decode(encodedValue))}")
// Base64.UrlSafe
val googleIOUrlBytes = "google.io".map { it.code.toByte() }.toByteArray()
// Encode value: Z29vZ2xlLmlv
val encodedURLSafe = Base64.UrlSafe.encode(googleIOUrlBytes)
println("Encoded UrlSafe: $encodedURLSafe")
// Decoded value: google.io
println("Decoded UrlSafe: ${String(Base64.UrlSafe.decode(encodedURLSafe))}")

Ahmet B.
- 1,290
- 10
- 20