package at.gv.egovernment.moa.util;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import iaik.utils.Base64InputStream;
import iaik.utils.Base64OutputStream;
/**
* Utitility functions for encoding/decoding Base64 strings.
*
* @author Patrick Peck
* @version $Id$
*/
public class Base64Utils {
/**
* Read the bytes encoded in a Base64 encoded String
.
*
* @param base64String The String
containing the Base64 encoded
* bytes.
* @param ignoreInvalidChars Whether to ignore invalid Base64 characters.
* @return byte[] The raw bytes contained in the base64String
.
* @throws IOException Failed to read the Base64 data.
*/
public static byte[] decode(String base64String, boolean ignoreInvalidChars)
throws IOException {
Base64InputStream in =
new Base64InputStream(
new ByteArrayInputStream(base64String.getBytes("UTF-8")),
ignoreInvalidChars);
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] bytes = new byte[256];
int bytesRead;
while ((bytesRead = in.read(bytes)) > 0) {
out.write(bytes, 0, bytesRead);
}
return out.toByteArray();
}
/**
* Read the bytes encoded in a Base64 encoded String
and provide
* them via an InputStream
.
*
* @param base64String The String
containing the Base64 encoded
* bytes.
* @param ignoreInvalidChars Whether to ignore invalid Base64 characters.
* @return The InputStream
from which the binary content of the
* base64String
can be read.
*/
public static InputStream decodeToStream(
String base64String,
boolean ignoreInvalidChars) {
try {
ByteArrayInputStream bin =
new ByteArrayInputStream(base64String.getBytes("UTF-8"));
Base64InputStream in = new Base64InputStream(bin, ignoreInvalidChars);
return in;
} catch (UnsupportedEncodingException e) {
// cannot occur, since UTF-8 is required to be supported by every JRE
return null;
}
}
/**
* Convert a byte array to a Base64 encoded String
.
*
* @param bytes The bytes to encode.
* @return String The Base64 encoded representation of the bytes
.
* @throws IOException Failed to write the bytes as Base64 data.
*/
public static String encode(byte[] bytes) throws IOException {
return encode(new ByteArrayInputStream(bytes));
}
/**
* Convert the data contained in the given stream to a Base64 encoded
* String
.
*
* @param inputStream The stream containing the data to encode.
* @return The Base64 encoded data of inputStream
, as a
* String
.
* @throws IOException Failed to convert the data in the stream.
*/
public static String encode(InputStream inputStream) throws IOException {
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
Base64OutputStream base64Stream = new Base64OutputStream(byteStream, "\n".getBytes());
byte[] bytes = new byte[256];
int bytesRead;
while ((bytesRead = inputStream.read(bytes)) > 0) {
base64Stream.write(bytes, 0, bytesRead);
}
base64Stream.flush();
base64Stream.close();
inputStream.close();
return byteStream.toString("UTF-8");
}
}