Mercurial > hg > ltpda
view src/MPipeline2/src/mpipeline/utils/Base64.java @ 52:daf4eab1a51e database-connection-manager tip
Fix. Default password should be [] not an empty string
author | Daniele Nicolodi <nicolodi@science.unitn.it> |
---|---|
date | Wed, 07 Dec 2011 17:29:47 +0100 |
parents | f0afece42f48 |
children |
line wrap: on
line source
/* * Class Base64 <one line to give the program's name and a brief idea of what it does.> * * Copyright (c) 2010 Max-Planck-Gesellschaft, Ingo Diepholz <ingo.diepholz@aei.mpg.de> * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program 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/>. * */ package mpipeline.utils; /* * Base64.java * * Brazil project web application toolkit, * export version: 2.0 * Copyright (c) 2000-2002 Sun Microsystems, Inc. * * Sun Public License Notice * * The contents of this file are subject to the Sun Public License * Version 1.0 (the "License"). You may not use this file except in * compliance with the License. A copy of the License is included as * the file "license.terms", and also available at * http://www.sun.com/ * * The Original Code is from: * Brazil project web application toolkit release 2.0. * The Initial Developer of the Original Code is: cstevens. * Portions created by cstevens are Copyright (C) Sun Microsystems, * Inc. All Rights Reserved. * * Contributor(s): cstevens, suhler. * * Version: 1.9 * Created by cstevens on 00/04/17 * Last modified by suhler on 02/07/24 10:49:48 */ /** * Utility to base64 encode and decode a string. * @author Stephen Uhler * @version 1.9, 02/07/24 */ public class Base64 { static byte[] encodeData; static String charSet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; static { encodeData = new byte[64]; for (int i = 0; i < 64; i++) { byte c = (byte) charSet.charAt(i); encodeData[i] = c; } } private Base64() { } /** * base-64 encode a string * @param s The ascii string to encode * @returns The base64 encoded result */ public static String encode(String s) { return encode(s.getBytes()); } /** * base-64 encode a byte array * @param src The byte array to encode * @returns The base64 encoded result */ public static String encode(byte[] src) { return encode(src, 0, src.length); } /** * base-64 encode a byte array * @param src The byte array to encode * @param start The starting index * @param len The number of bytes * @returns The base64 encoded result */ public static String encode(byte[] src, int start, int length) { byte[] dst = new byte[(length + 2) / 3 * 4 + length / 72]; int x = 0; int dstIndex = 0; int state = 0; // which char in pattern int old = 0; // previous byte int len = 0; // length decoded so far int max = length + start; for (int srcIndex = start; srcIndex < max; srcIndex++) { x = src[srcIndex]; switch (++state) { case 1: dst[dstIndex++] = encodeData[(x >> 2) & 0x3f]; break; case 2: dst[dstIndex++] = encodeData[((old << 4) & 0x30) | ((x >> 4) & 0xf)]; break; case 3: dst[dstIndex++] = encodeData[((old << 2) & 0x3C) | ((x >> 6) & 0x3)]; dst[dstIndex++] = encodeData[x & 0x3F]; state = 0; break; } old = x; if (++len >= 72) { dst[dstIndex++] = (byte) '\n'; len = 0; } } /* * now clean up the end bytes */ switch (state) { case 1: dst[dstIndex++] = encodeData[(old << 4) & 0x30]; dst[dstIndex++] = (byte) '='; dst[dstIndex++] = (byte) '='; break; case 2: dst[dstIndex++] = encodeData[(old << 2) & 0x3c]; dst[dstIndex++] = (byte) '='; break; } return new String(dst); } /** * A Base64 decoder. This implementation is slow, and * doesn't handle wrapped lines. * The output is undefined if there are errors in the input. * @param s a Base64 encoded string * @returns The byte array eith the decoded result */ public static byte[] decode(String s) { int end = 0; // end state if (s.endsWith("=")) { end++; } if (s.endsWith("==")) { end++; } int len = (s.length() + 3) / 4 * 3 - end; byte[] result = new byte[len]; int dst = 0; try { for (int src = 0; src < s.length(); src++) { int code = charSet.indexOf(s.charAt(src)); if (code == -1) { break; } switch (src % 4) { case 0: result[dst] = (byte) (code << 2); break; case 1: result[dst++] |= (byte) ((code >> 4) & 0x3); result[dst] = (byte) (code << 4); break; case 2: result[dst++] |= (byte) ((code >> 2) & 0xf); result[dst] = (byte) (code << 6); break; case 3: result[dst++] |= (byte) (code & 0x3f); break; } } } catch (ArrayIndexOutOfBoundsException e) { } return result; } /** * Test the decoder and encoder. * Call as <code>Base64 [string]</code>. */ public static void main(String[] args) { System.out.println("encode: " + args[0] + " -> (" + encode(args[0]) + ")"); System.out.println("decode: " + args[0] + " -> (" + new String(decode(args[0])) + ")"); } }