public static byte[] decode(final char[] input) {
		int iLen = input.length;

		if (iLen % 4 != 0) {
			throw new IllegalArgumentException(
					"Length of Base64 encoded input string is not a multiple of 4.");
		}

		while (iLen > 0 && input[iLen - 1] == '=') {
			iLen--;
		}

		int oLen = (iLen * 3) / 4;
		byte[] out = new byte[oLen];
		int ip = 0;
		int op = 0;

		while (ip < iLen) {
			int i0 = input[ip++];
			int i1 = input[ip++];
			int i2 = ip < iLen ? input[ip++] : 'A';
			int i3 = ip < iLen ? input[ip++] : 'A';

			if (i0 > 127 || i1 > 127 || i2 > 127 || i3 > 127) {
				throw new IllegalArgumentException("Illegal character in Base64 encoded data.");
			}

			int b0 = MAP2[i0];
			int b1 = MAP2[i1];
			int b2 = MAP2[i2];
			int b3 = MAP2[i3];

			if (b0 < 0 || b1 < 0 || b2 < 0 || b3 < 0) {
				throw new IllegalArgumentException("Illegal character in Base64 encoded data.");
			}

			int o0 = (b0 << 2) | (b1 >>> 4);
			int o1 = ((b1 & 0xf) << 4) | (b2 >>> 2);
			int o2 = ((b2 & 3) << 6) | b3;
			out[op++] = (byte) o0;

			if (op < oLen) {
				out[op++] = (byte) o1;
			}

			if (op < oLen) {
				out[op++] = (byte) o2;
			}
		}

		return out;
	}
public static byte [ ] decode ( final char [ ] input ) { int iLen = input . length ; if ( iLen % 4 != 0 ) { throw new IllegalArgumentException ( "Length of Base64 encoded input string is not a multiple of 4." ) ; } while ( iLen > 0 && input [ iLen - 1 ] == '=' ) { iLen -- ; } int oLen = ( iLen * 3 ) / 4 ; byte [ ] out = new byte [ oLen ] ; int ip = 0 ; int op = 0 ; while ( ip < iLen ) { int i0 = input [ ip ++ ] ; int i1 = input [ ip ++ ] ; int i2 = ip < iLen ? input [ ip ++ ] : 'A' ; int i3 = ip < iLen ? input [ ip ++ ] : 'A' ; if ( i0 > 127 || i1 > 127 || i2 > 127 || i3 > 127 ) { throw new IllegalArgumentException ( "Illegal character in Base64 encoded data." ) ; } int b0 = MAP2 [ i0 ] ; int b1 = MAP2 [ i1 ] ; int b2 = MAP2 [ i2 ] ; int b3 = MAP2 [ i3 ] ; if ( b0 < 0 || b1 < 0 || b2 < 0 || b3 < 0 ) { throw new IllegalArgumentException ( "Illegal character in Base64 encoded data." ) ; } int o0 = ( b0 << 2 ) | ( b1 > > > 4 ) ; int o1 = ( ( b1 & 0xf ) << 4 ) | ( b2 > > > 2 ) ; int o2 = ( ( b2 & 3 ) << 6 ) | b3 ; out [ op ++ ] = ( byte ) o0 ; if ( op < oLen ) { out [ op ++ ] = ( byte ) o1 ; } if ( op < oLen ) { out [ op ++ ] = ( byte ) o2 ; } } return out ; }
Decodes a byte array from Base64 format. No blanks or line breaks are allowed within the Base64 encoded data.

@param input a character array containing the Base64 encoded data.
@return An array containing the decoded data bytes.
@throws IllegalArgumentException if the input is not valid Base64 encoded data.