blob: b277b1370e774dc9de0c94f907ce60fd223868f6 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.shiro.codec;
/**
* Provides <a href="http://en.wikipedia.org/wiki/Base64">Base 64</a> encoding and decoding as defined by
* <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</a>.
* <p/>
* This class implements section <cite>6.8. Base64 Content-Transfer-Encoding</cite> from RFC 2045 <cite>Multipurpose
* Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies</cite> by Freed and Borenstein.
* <p/>
* This class was borrowed from Apache Commons Codec SVN repository (rev. 618419) with modifications
* to enable Base64 conversion without a full dependency on Commons Codec. We didn't want to reinvent the wheel of
* great work they've done, but also didn't want to force every Shiro user to depend on the commons-codec.jar
* <p/>
* As per the Apache 2.0 license, the original copyright notice and all author and copyright information have
* remained in tact.
*
* @see <a href="http://en.wikipedia.org/wiki/Base64">Wikipedia: Base 64</a>
* @see <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</a>
* @since 0.9
*/
public class Base64 {
/**
* Base64 encodes the specified byte array and then encodes it as a String using Shiro's preferred character
* encoding (UTF-8).
*
* @param bytes the byte array to Base64 encode.
* @return a UTF-8 encoded String of the resulting Base64 encoded byte array.
*/
public static String encodeToString(byte[] bytes) {
byte[] encoded = encode(bytes);
return CodecSupport.toString(encoded);
}
/**
* Encodes a byte[] containing binary data, into a byte[] containing characters in the Base64 alphabet.
*
* @param pArray a byte array containing binary data
* @return A byte array containing only Base64 character data
*/
public static byte[] encode(byte[] pArray) {
return java.util.Base64.getEncoder().encode(pArray);
}
/**
* Converts the specified UTF-8 Base64 encoded String and decodes it to a resultant UTF-8 encoded string.
*
* @param base64Encoded a UTF-8 Base64 encoded String
* @return the decoded String, UTF-8 encoded.
*/
public static String decodeToString(String base64Encoded) {
byte[] encodedBytes = CodecSupport.toBytes(base64Encoded);
return decodeToString(encodedBytes);
}
/**
* Decodes the specified Base64 encoded byte array and returns the decoded result as a UTF-8 encoded.
*
* @param base64Encoded a Base64 encoded byte array
* @return the decoded String, UTF-8 encoded.
*/
public static String decodeToString(byte[] base64Encoded) {
byte[] decoded = decode(base64Encoded);
return CodecSupport.toString(decoded);
}
/**
* Converts the specified UTF-8 Base64 encoded String and decodes it to a raw Base64 decoded byte array.
*
* @param base64Encoded a UTF-8 Base64 encoded String
* @return the raw Base64 decoded byte array.
*/
public static byte[] decode(String base64Encoded) {
byte[] bytes = CodecSupport.toBytes(base64Encoded);
return decode(bytes);
}
/**
* Decodes Base64 data into octets
*
* @param base64Data Byte array containing Base64 data
* @return Array containing decoded data.
*/
public static byte[] decode(byte[] base64Data) {
return java.util.Base64.getDecoder().decode(base64Data);
}
}