/** * Copyright 2010 JBoss Inc * * Licensed 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.eclipse.webdav.internal.authentication; import org.eclipse.webdav.internal.kernel.utils.Assert; /** * This class implements a BASE64 character encoder as specified in * RFC1521. */ public final class Base64Encoder { /** * Returns the BASE64 encoded <code>String</code> of the given data. * * @param data the bytes to be BASE64 encoded * @return the BASE64 encoded <code>String</code> of the given data */ public static String encode(byte[] data) { Assert.isNotNull(data); StringBuffer buf = new StringBuffer(); byte b = 0; int bits = 2; for (int i = 0; i < data.length; ++i) { b = (byte) ((b | (data[i] >> bits)) & 0x003f); buf.append(encode(b)); b = (byte) ((data[i] << 6 - bits) & 0x003f); bits += 2; if (bits == 8) { buf.append(encode((byte) (b & 0x003f))); b = 0; bits = 2; } } if (bits == 4) { buf.append(encode(b)); buf.append("=="); //$NON-NLS-1$ } else if (bits == 6) { buf.append(encode(b)); buf.append('='); } return buf.toString(); } private static char encode(byte b) { if (b >= 0 && b <= 25) return (char) (b + 65); if (b >= 26 && b <= 51) return (char) (b + 71); if (b >= 52 && b <= 61) return (char) (b - 4); if (b == 62) return '+'; if (b == 63) return '/'; return '='; } }