Java Base64 Convert to base64ToByteArray(String data)

Here you can find the source of base64ToByteArray(String data)

Description

Converts a base64 encoded string to a byte array

License

Open Source License

Declaration

public static byte[] base64ToByteArray(String data) 

Method Source Code

//package com.java2s;
/**/*w  ww  . java 2  s  .  c o  m*/
* 
* Copyright (C) 2004-2008 FhG Fokus
*
* This file is part of the FhG Fokus UPnP stack - an open source UPnP implementation
* with some additional features
*
* You can redistribute the FhG Fokus UPnP stack and/or modify it
* under the terms of the GNU General Public License Version 3 as published by
* the Free Software Foundation.
*
* For a license to use the FhG Fokus UPnP stack software under conditions
* other than those described here, or to purchase support for this
* software, please contact Fraunhofer FOKUS by e-mail at the following
* addresses:
*   upnpstack@fokus.fraunhofer.de
*
* The FhG Fokus UPnP stack is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, see <http://www.gnu.org/licenses/>
* or write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/

import java.io.ByteArrayOutputStream;

public class Main {
    /** Converts a base64 encoded string to a byte array */
    public static byte[] base64ToByteArray(String data) {
        if (data == null) {
            return null;
        }
        // length of string must be divisible by 4
        if (data.length() % 4 != 0) {
            return null;
        }

        ByteArrayOutputStream result = new ByteArrayOutputStream();
        int offset = 0;
        while (offset < data.length()) {
            byte[] fragment = base64ToBytes(data.substring(offset, offset + 4));
            result.write(fragment, 0, fragment.length);
            offset += 4;
        }
        return result.toByteArray();
    }

    /** Converts a base64 encoded string of four chars to the corresponding bytes */
    private static byte[] base64ToBytes(String value) {
        // catch wrong size
        if (value.length() != 4) {
            return null;
        }

        // process padding
        int paddingOffset = value.indexOf("=");
        // no padding
        if (paddingOffset == -1) {
            byte[] result = new byte[3];
            result[0] = (byte) (base64ToBits(value.charAt(0)) << 2 | base64ToBits(value.charAt(1)) >> 4);
            result[1] = (byte) (base64ToBits(value.charAt(1)) << 4 | base64ToBits(value.charAt(2)) >> 2);
            result[2] = (byte) (base64ToBits(value.charAt(2)) << 6 | base64ToBits(value.charAt(3)));
            return result;
        }
        // 1 padded byte
        if (paddingOffset == 3) {
            byte[] result = new byte[2];
            result[0] = (byte) (base64ToBits(value.charAt(0)) << 2 | base64ToBits(value.charAt(1)) >> 4);
            result[1] = (byte) (base64ToBits(value.charAt(1)) << 4 | base64ToBits(value.charAt(2)) >> 2);
            return result;
        }
        // 2 padded bytes
        if (paddingOffset == 2) {
            byte[] result = new byte[1];
            result[0] = (byte) (base64ToBits(value.charAt(0)) << 2 | base64ToBits(value.charAt(1)) >> 4);
            return result;
        }
        // error
        return null;
    }

    /** Converts a Base64 char to to corresponding 6-bit value */
    private static byte base64ToBits(char data) {
        if (data >= 'A' && data <= 'Z') {
            return (byte) (data - 'A');
        }
        if (data >= 'a' && data <= 'z') {
            return (byte) (data - 'a' + 26);
        }
        if (data >= '0' && data <= '9') {
            return (byte) (data - '0' + 52);
        }
        if (data == '+') {
            return (byte) 62;
        }
        return (byte) 63;
    }
}

Related

  1. base642byte(String base64)
  2. base64StrToStream(String base64Str)
  3. base64ToByte(String data)
  4. base64ToFile(String base64Code, String targetPath)
  5. fromBase64(byte[] buf, int start, int length)
  6. fromBase64(final String encoded)
  7. fromBase64(final String input)