50

Is there a base-64 decoder and encoder for a String in Android?

0

6 Answers 6

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.

Sign up to request clarification or add additional context in comments.

2 Comments

using Base64.DEFAULT will insert a line break in my case. I use Base64.NO_WRAP instead.
The only one which works for me with 2 bytes characters.
33

See android.util.Base64

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.

4 Comments

encoded Base64 of Mw== is TXc9PQ== But this source code show TXc9PQo= What's wrong?! :-o
@Mr.Hyde You have a trailing new line. TXc9PQo= decodes to Mw==\n.
Yea, and to solve it, we should use Base64.NO_WRAP for flag in encodeToString function, instead of Base64.DEFAULT.
hi have Base64.class but its having an error "$assertionsDisabled cannot be resolved to a variable"
14

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

1 Comment

as @arvin commented above: "using Base64.DEFAULT will insert a line break in my case. I use Base64.NO_WRAP instead."
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

Comments

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

Comments

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))}")

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.