亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? base64.java

?? java servlet著名論壇源代碼
?? JAVA
字號:
/*
 * $Header: /cvsroot/mvnforum/myvietnam/src/net/myvietnam/mvncore/misc/Base64.java,v 1.6 2004/06/27 01:20:39 skoehler Exp $
 * $Author: skoehler $
 * $Revision: 1.6 $
 * $Date: 2004/06/27 01:20:39 $
 *
 * ====================================================================
 *
 * Copyright (C) 2002-2004 by MyVietnam.net
 *
 * 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 2
 * of the License, or any later version.
 *
 * All copyright notices regarding MyVietnam and MyVietnam CoreLib
 * MUST remain intact in the scripts and source code.
 *
 * 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, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 *
 * Correspondence and Marketing Questions can be sent to:
 * info@MyVietnam.net
 *
 * @author: Minh Nguyen  minhnn@MyVietnam.net
 * @author: Mai  Nguyen  mai.nh@MyVietnam.net
 */
/*
 * $Header: /cvsroot/mvnforum/myvietnam/src/net/myvietnam/mvncore/misc/Base64.java,v 1.6 2004/06/27 01:20:39 skoehler Exp $
 * $Revision: 1.6 $
 * $Date: 2004/06/27 01:20:39 $
 *
 * ====================================================================
 *
 * The Apache Software License, Version 1.1
 *
 * Copyright (c) 1999 The Apache Software Foundation.  All rights
 * reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. The end-user documentation included with the redistribution, if
 *    any, must include the following acknowlegement:
 *       "This product includes software developed by the
 *        Apache Software Foundation (http://www.apache.org/)."
 *    Alternately, this acknowlegement may appear in the software itself,
 *    if and wherever such third-party acknowlegements normally appear.
 *
 * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
 *    Foundation" must not be used to endorse or promote products derived
 *    from this software without prior written permission. For written
 *    permission, please contact apache@apache.org.
 *
 * 5. Products derived from this software may not be called "Apache"
 *    nor may "Apache" appear in their names without prior written
 *    permission of the Apache Group.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of the Apache Software Foundation.  For more
 * information on the Apache Software Foundation, please see
 * <http://www.apache.org/>.
 *
 * [Additional notices, if required by prior licensing conditions]
 *
 */

package net.myvietnam.mvncore.misc;

/**
 * This class provides encode/decode for RFC 2045 Base64 as defined by
 * RFC 2045, N. Freed and N. Borenstein.  <a
 * href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</a>:
 * Multipurpose Internet Mail Extensions (MIME) Part One: Format of
 * Internet Message Bodies. Reference 1996
 *
 * @author Jeffrey Rodriguez
 * @version $Id: Base64.java,v 1.6 2004/06/27 01:20:39 skoehler Exp $
 */
public final class  Base64
{
    static private final int  BASELENGTH         = 255;
    static private final int  LOOKUPLENGTH       = 64;
    static private final int  TWENTYFOURBITGROUP = 24;
    static private final int  EIGHTBIT           = 8;
    static private final int  SIXTEENBIT         = 16;
    static private final int  SIXBIT             = 6;
    static private final int  FOURBYTE           = 4;
    static private final int  SIGN               = -128;
    static private final byte PAD                = (byte) '=';
    static private byte [] base64Alphabet       = new byte[BASELENGTH];
    static private byte [] lookUpBase64Alphabet = new byte[LOOKUPLENGTH];
    //static private final Log log = LogSource.getInstance("org.apache.commons.util.Base64");

    static
    {
        for (int i = 0; i < BASELENGTH; i++ )
        {
            base64Alphabet[i] = -1;
        }
        for (int i = 'Z'; i >= 'A'; i--)
        {
            base64Alphabet[i] = (byte) (i - 'A');
        }
        for (int i = 'z'; i>= 'a'; i--)
        {
            base64Alphabet[i] = (byte) (i - 'a' + 26);
        }
        for (int i = '9'; i >= '0'; i--)
        {
            base64Alphabet[i] = (byte) (i - '0' + 52);
        }

        base64Alphabet['+']  = 62;
        base64Alphabet['/']  = 63;

        for (int i = 0; i <= 25; i++ )
            lookUpBase64Alphabet[i] = (byte) ('A' + i);

        for (int i = 26,  j = 0; i <= 51; i++, j++ )
            lookUpBase64Alphabet[i] = (byte) ('a'+ j);

        for (int i = 52,  j = 0; i <= 61; i++, j++ )
            lookUpBase64Alphabet[i] = (byte) ('0' + j);

        lookUpBase64Alphabet[62] = (byte) '+';
        lookUpBase64Alphabet[63] = (byte) '/';
    }

    public static boolean isBase64( String isValidString )
    {
        return isArrayByteBase64(isValidString.getBytes());
    }

    public static boolean isBase64( byte octect )
    {
        //shall we ignore white space? JEFF??
        return (octect == PAD || base64Alphabet[octect] != -1);
    }

    public static boolean isArrayByteBase64( byte[] arrayOctect )
    {
        int length = arrayOctect.length;
        if (length == 0)
        {
            // shouldn't a 0 length array be valid base64 data?
            // return false;
            return true;
        }
        for (int i=0; i < length; i++)
        {
            if ( !Base64.isBase64(arrayOctect[i]) )
                return false;
        }
        return true;
    }

    /**
     * Encodes hex octects into Base64.
     *
     * @param binaryData Array containing binary data to encode.
     * @return Base64-encoded data.
     */
    public static byte[] encode( byte[] binaryData )
    {
        int      lengthDataBits    = binaryData.length*EIGHTBIT;
        int      fewerThan24bits   = lengthDataBits%TWENTYFOURBITGROUP;
        int      numberTriplets    = lengthDataBits/TWENTYFOURBITGROUP;
        byte     encodedData[]     = null;


        if (fewerThan24bits != 0)
        {
            //data not divisible by 24 bit
            encodedData = new byte[ (numberTriplets + 1 ) * 4 ];
        }
        else
        {
            // 16 or 8 bit
            encodedData = new byte[ numberTriplets * 4 ];
        }

        byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0;

        int encodedIndex = 0;
        int dataIndex   = 0;
        int i           = 0;
        //log.debug("number of triplets = " + numberTriplets);
        for ( i = 0; i<numberTriplets; i++ )
        {
            dataIndex = i*3;
            b1 = binaryData[dataIndex];
            b2 = binaryData[dataIndex + 1];
            b3 = binaryData[dataIndex + 2];

            //log.debug("b1= " + b1 +", b2= " + b2 + ", b3= " + b3);

            l  = (byte)(b2 & 0x0f);
            k  = (byte)(b1 & 0x03);

            encodedIndex = i * 4;
            byte val1 = ((b1 & SIGN)==0)?(byte)(b1>>2):(byte)((b1)>>2^0xc0);
            byte val2 = ((b2 & SIGN)==0)?(byte)(b2>>4):(byte)((b2)>>4^0xf0);
            byte val3 = ((b3 & SIGN)==0)?(byte)(b3>>6):(byte)((b3)>>6^0xfc);

            encodedData[encodedIndex]   = lookUpBase64Alphabet[ val1 ];
            //log.debug( "val2 = " + val2 );
            //log.debug( "k4   = " + (k<<4) );
            //log.debug(  "vak  = " + (val2 | (k<<4)) );
            encodedData[encodedIndex+1] =
                lookUpBase64Alphabet[ val2 | ( k<<4 )];
            encodedData[encodedIndex+2] =
                lookUpBase64Alphabet[ (l <<2 ) | val3 ];
            encodedData[encodedIndex+3] = lookUpBase64Alphabet[ b3 & 0x3f ];
        }

        // form integral number of 6-bit groups
        dataIndex    = i*3;
        encodedIndex = i*4;
        if (fewerThan24bits == EIGHTBIT )
        {
            b1 = binaryData[dataIndex];
            k = (byte) ( b1 &0x03 );
            //log.debug("b1=" + b1);
            //log.debug("b1<<2 = " + (b1>>2) );
            byte val1 = ((b1 & SIGN)==0)?(byte)(b1>>2):(byte)((b1)>>2^0xc0);
            encodedData[encodedIndex]     = lookUpBase64Alphabet[ val1 ];
            encodedData[encodedIndex + 1] = lookUpBase64Alphabet[ k<<4 ];
            encodedData[encodedIndex + 2] = PAD;
            encodedData[encodedIndex + 3] = PAD;
        }
        else if (fewerThan24bits == SIXTEENBIT)
        {

            b1 = binaryData[dataIndex];
            b2 = binaryData[dataIndex +1 ];
            l = (byte) (b2 & 0x0f);
            k = (byte) (b1 & 0x03);

            byte val1 = ((b1 & SIGN) == 0)?(byte)(b1>>2):(byte)((b1)>>2^0xc0);
            byte val2 = ((b2 & SIGN) == 0)?(byte)(b2>>4):(byte)((b2)>>4^0xf0);

            encodedData[encodedIndex]     = lookUpBase64Alphabet[ val1 ];
            encodedData[encodedIndex + 1] =
                lookUpBase64Alphabet[ val2 | ( k<<4 )];
            encodedData[encodedIndex + 2] = lookUpBase64Alphabet[ l<<2 ];
            encodedData[encodedIndex + 3] = PAD;
        }

        return encodedData;
    }

    /**
     * Decodes Base64 data into octects
     *
     * @param base64Data Byte array containing Base64 data
     * @return Array containing decoded data.
     */
    public static byte[] decode( byte[] base64Data )
    {
        // handle the edge case, so we don't have to worry about it later
        if(base64Data.length == 0) { return new byte[0]; }

        int      numberQuadruple    = base64Data.length/FOURBYTE;
        byte     decodedData[]      = null;
        byte     b1=0,b2=0,b3=0, b4=0, marker0=0, marker1=0;

        // Throw away anything not in base64Data

        int encodedIndex = 0;
        int dataIndex    = 0;
        {
            // this sizes the output array properly - rlw
            int lastData = base64Data.length;
            // ignore the '=' padding
            while (base64Data[lastData-1] == PAD)
            {
                if (--lastData == 0)
                {
                    return new byte[0];
                }
            }
            decodedData = new byte[ lastData - numberQuadruple ];
        }

        for (int i = 0; i < numberQuadruple; i++)
        {
            dataIndex = i * 4;
            marker0   = base64Data[dataIndex + 2];
            marker1   = base64Data[dataIndex + 3];

            b1 = base64Alphabet[base64Data[dataIndex]];
            b2 = base64Alphabet[base64Data[dataIndex +1]];

            if (marker0 != PAD && marker1 != PAD)
            {
                //No PAD e.g 3cQl
                b3 = base64Alphabet[ marker0 ];
                b4 = base64Alphabet[ marker1 ];

                decodedData[encodedIndex]   = (byte)(  b1 <<2 | b2>>4 ) ;
                decodedData[encodedIndex + 1] =
                    (byte)(((b2 & 0xf)<<4 ) |( (b3>>2) & 0xf) );
                decodedData[encodedIndex + 2] = (byte)( b3<<6 | b4 );
            }
            else if (marker0 == PAD)
            {
                //Two PAD e.g. 3c[Pad][Pad]
                decodedData[encodedIndex]   = (byte)(  b1 <<2 | b2>>4 ) ;
            }
            else if (marker1 == PAD)
            {
                //One PAD e.g. 3cQ[Pad]
                b3 = base64Alphabet[ marker0 ];

                decodedData[encodedIndex]   = (byte)(  b1 <<2 | b2>>4 );
                decodedData[encodedIndex + 1] =
                    (byte)(((b2 & 0xf)<<4 ) |( (b3>>2) & 0xf) );
            }
            encodedIndex += 3;
        }
        return decodedData;
    }


}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产不卡高清在线观看视频| aaa欧美色吧激情视频| 国产美女主播视频一区| 色悠悠久久综合| 国产日韩成人精品| 丝袜亚洲精品中文字幕一区| 成人黄色一级视频| 欧美大片在线观看| 成人毛片视频在线观看| 欧美a级一区二区| 国产麻豆欧美日韩一区| 国产大陆精品国产| 成人的网站免费观看| 成人av资源站| 欧美探花视频资源| 欧美伦理电影网| 2021久久国产精品不只是精品| 26uuu另类欧美亚洲曰本| 久久久亚洲国产美女国产盗摄| 久久久777精品电影网影网 | 精品国精品国产| 精品99久久久久久| 国产精品网曝门| 一区二区久久久| 蜜桃精品视频在线| 成人不卡免费av| 欧美电影影音先锋| 久久久久久电影| 一区二区三区欧美久久| 秋霞午夜av一区二区三区| 国产盗摄一区二区三区| 欧美丝袜自拍制服另类| 久久综合久久综合久久| 亚洲啪啪综合av一区二区三区| 亚洲h动漫在线| 国产福利一区在线| 欧美疯狂做受xxxx富婆| 国产日韩精品一区| 视频一区视频二区中文字幕| 国内精品久久久久影院一蜜桃| 成人av资源站| 精品少妇一区二区三区日产乱码| 国产精品视频麻豆| 久久精品国产精品亚洲红杏| 91亚洲精品久久久蜜桃| 精品播放一区二区| 亚洲综合男人的天堂| 久久99国产精品免费网站| 91香蕉视频污| 成人精品视频一区二区三区| 日韩久久久精品| 国产69精品久久久久777| 国产精品美女久久久久av爽李琼 | 美女精品自拍一二三四| 久久久久久影视| www.色综合.com| 亚洲一区二区三区四区在线观看| 欧美另类z0zxhd电影| 日韩av电影天堂| 国产三级久久久| 欧美性感一类影片在线播放| 午夜精品一区二区三区电影天堂| 久久九九全国免费| 狠狠色狠狠色综合| 欧美二区三区91| 亚洲一区二区视频在线| 99国产精品久久久久| 国产精品视频你懂的| 国产精品一区二区在线看| 91精品国产综合久久福利软件| 亚洲资源在线观看| 91色porny蝌蚪| 国产精品美女久久久久久久久久久 | 亚洲免费观看在线观看| 97se亚洲国产综合自在线观| 中日韩免费视频中文字幕| 国产精品综合在线视频| 欧美国产一区视频在线观看| 国产精品亚洲第一| 中文在线资源观看网站视频免费不卡| 国内一区二区视频| 中文字幕av不卡| 99精品国产99久久久久久白柏| 国产精品久久三区| 日本韩国欧美三级| 亚洲国产欧美在线| 欧美一级二级三级乱码| 国产一区二区在线视频| 亚洲国产精品ⅴa在线观看| 成人的网站免费观看| 一区二区三区国产豹纹内裤在线| 91九色02白丝porn| 免费高清在线视频一区·| 精品国产伦理网| jiyouzz国产精品久久| 亚洲主播在线观看| 精品捆绑美女sm三区| 国产剧情一区二区三区| 亚洲色图视频网| 欧美高清视频在线高清观看mv色露露十八 | 中文字幕中文字幕在线一区 | 美女免费视频一区二区| 久久精品欧美一区二区三区麻豆| 成人免费高清视频| 亚洲影视资源网| 久久久精品国产99久久精品芒果| 丁香婷婷综合网| 亚洲a一区二区| 国产午夜三级一区二区三| 一本到三区不卡视频| 日本成人在线电影网| 欧美国产精品一区| 91麻豆精品久久久久蜜臀| 成人va在线观看| 久热成人在线视频| 一区二区在线观看av| 精品剧情v国产在线观看在线| 99精品视频在线观看免费| 捆绑调教美女网站视频一区| 国产精品久久久久aaaa樱花| 在线不卡一区二区| 94色蜜桃网一区二区三区| 日av在线不卡| 一区二区三区欧美亚洲| 欧美xingq一区二区| 91丨九色丨尤物| 视频一区二区三区在线| 国产精品私房写真福利视频| 777午夜精品视频在线播放| 本田岬高潮一区二区三区| 久久99精品久久久久久动态图 | 国产精品二区一区二区aⅴ污介绍| 欧美色涩在线第一页| 国产suv精品一区二区6| 日韩黄色小视频| 亚洲在线免费播放| 国产精品久久久久久久久免费桃花| 欧美电影在线免费观看| 91国产视频在线观看| 99精品视频中文字幕| 国产99精品在线观看| 老司机精品视频导航| 日韩高清在线电影| 亚洲国产综合在线| 一区二区三区四区在线免费观看| 国产农村妇女精品| 国产欧美一区二区三区沐欲 | 成人av手机在线观看| 激情深爱一区二区| 久久99日本精品| 乱一区二区av| 久久精品国产99国产精品| 免费视频最近日韩| 免费视频一区二区| 国产自产v一区二区三区c| 久久丁香综合五月国产三级网站| 日韩激情视频网站| 免费观看91视频大全| 久久精品国产一区二区| 久久精品国产99久久6| 国模少妇一区二区三区| 极品销魂美女一区二区三区| 精品午夜一区二区三区在线观看 | 日韩美女久久久| 一区二区三区在线视频播放| 亚洲一区二区av在线| 亚洲福利一区二区三区| 爽好久久久欧美精品| 麻豆免费精品视频| 国产不卡视频在线观看| 成人自拍视频在线| 在线视频中文字幕一区二区| 欧美片网站yy| 日韩欧美黄色影院| 国产欧美日韩一区二区三区在线观看| 国产精品亲子伦对白| 亚洲精品国产一区二区三区四区在线| 亚洲卡通动漫在线| 日韩黄色小视频| 懂色av中文字幕一区二区三区| 色一区在线观看| 日韩一区二区影院| 中文字幕一区二区5566日韩| 亚洲永久精品大片| 国产伦精品一区二区三区免费 | 蜜臀va亚洲va欧美va天堂| 国产一区二区在线电影| 国产aⅴ精品一区二区三区色成熟| 99久久精品免费精品国产| 欧美精品少妇一区二区三区| 精品欧美乱码久久久久久 | 精品久久久久久久久久久院品网| 国产香蕉久久精品综合网| 亚洲综合色在线| 国产在线视频一区二区| 在线视频你懂得一区| 国产亚洲一区二区在线观看| 亚洲一区视频在线| yourporn久久国产精品| 日韩丝袜情趣美女图片|