GWT Base64 Decoding into Binary (supports Unsigned byte data)

This class is a base64 decoder for GWT it could decode base64 string even if it contains unsigned byte data .

package com.project.logic;
//By saher hassan 
public class Base64Decode {
	private final static String base64chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

	public static byte[] decode(String s) {

		// remove/ignore any characters not in the base64 characters list
		// or the pad character -- particularly newlines
		s = s.replaceAll("[^" + base64chars + "=]", "");

		// replace any incoming padding with a zero pad (the 'A' character is
		// zero)
		String p = (s.charAt(s.length() - 1) == '=' ? (s.charAt(s.length() - 2) == '=' ? "AA"
				: "A")
				: "");

		s = s.substring(0, s.length() - p.length()) + p;
		int resLength = (int) Math.ceil(((float) (s.length()) / 4f) * 3f);
		byte[] bufIn = new byte[resLength];
		int bufIn_i = 0;

		// increment over the length of this encrypted string, four characters
		// at a time
		for (int c = 0; c < s.length(); c += 4) {

			// each of these four characters represents a 6-bit index in the
			// base64 characters list which, when concatenated, will give the
			// 24-bit number for the original 3 characters
			int n = (base64chars.indexOf(s.charAt(c)) << 18)
					+ (base64chars.indexOf(s.charAt(c + 1)) << 12)
					+ (base64chars.indexOf(s.charAt(c + 2)) << 6)
					+ base64chars.indexOf(s.charAt(c + 3));

			// split the 24-bit number into the original three 8-bit (ASCII)
			// characters

			char c1 = (char) ((n >>> 16) & 0xFF);
			char c2 = (char) ((n >>>8) & 0xFF);
			char c3 = (char) (n & 0xFF);

			bufIn[bufIn_i++] = (byte) c1;
			bufIn[bufIn_i++] = (byte) c2;
			bufIn[bufIn_i++] = (byte) c3;

		}

		return bufIn;
	}
}
About these ads

4 thoughts on “GWT Base64 Decoding into Binary (supports Unsigned byte data)

  1. class Base64Encode {
    private final static String base64chars = “ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”;

    public static String encode(String s) {

    // the result/encoded string, the padding string, and the pad count
    String r = “”, p = “”;
    int c = s.length() % 3;

    // add a right zero pad to make this string a multiple of 3 characters
    if (c > 0) {
    for (; c < 3; c++) {
    p += "=";
    s += "";
    }
    }

    // increment over the length of the string, three characters at a time
    for (c = 0; c 0 && (c / 3 * 4) % 76 == 0)
    r += “\r\n”;

    // these three 8-bit (ASCII) characters become one 24-bit number
    int n = (s.charAt(c) << 16) + (s.charAt(c + 1) <> 18) & 63, n2 = (n >> 12) & 63, n3 = (n >> 6) & 63, n4 = n & 63;

    // those four 6-bit numbers are used as indices into the base64
    // character list
    r += “” + base64chars.charAt(n1) + base64chars.charAt(n2)
    + base64chars.charAt(n3) + base64chars.charAt(n4);
    }

    return r.substring(0, r.length() – p.length()) + p;
    }
    }

  2. Hi Sahers,
    This was just what I was looking for, I am working in an open source project of my own and I’d like to use it, if that’s ok with you, could you please add some sort of standard copyright notice allowing redistribution and modification?
    I could code it again myself but I guess now it wouldn’t be much different than yours anyways.
    Thanks a lot!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s