<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    空間站

    北極心空

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks
    /**
    * 我在網上看到過很多BASE64的JavaScript算法,都覺得不滿意,于是自己寫了一個,在這里分享一下。
    * 我的代碼在質量的效率都較高,沒有一些冗余的操作。總體來講我覺得非常不錯。
    * 如果大家有什么不懂的地方可以問我。
    */
    var BASE64={
        
    /**
         * 此變量為編碼的key,每個字符的下標相對應于它所代表的編碼。
         
    */
        enKey: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
    +/',
        
    /**
         * 此變量為解碼的key,是一個數組,BASE64的字符的ASCII值做下標,所對應的就是該字符所代表的編碼值。
         
    */
        deKey: 
    new Array(
            
    -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1,
            
    -1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1,
            
    -1-1-1-1-1-1-1-1-1-1-162-1-1-163,
            
    52535455565758596061-1-1-1-1-1-1,
            
    -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  91011121314,
            
    1516171819202122232425-1-1-1-1-1,
            
    -1262728293031323334353637383940,
            
    4142434445464748495051-1-1-1-1-1
        ),
        
    /**
         * 編碼
         
    */
        encode: 
    function(src){
            
    //用一個數組來存放編碼后的字符,效率比用字符串相加高很多。
            var str=new Array();
            
    var ch1, ch2, ch3;
            
    var pos=0;
           
    //每三個字符進行編碼。
            while(pos+3<=src.length){
                ch1
    =src.charCodeAt(pos++);
                ch2
    =src.charCodeAt(pos++);
                ch3
    =src.charCodeAt(pos++);
                str.push(
    this.enKey.charAt(ch1>>2), this.enKey.charAt(((ch1<<4)+(ch2>>4))&0x3f));
                str.push(
    this.enKey.charAt(((ch2<<2)+(ch3>>6))&0x3f), this.enKey.charAt(ch3&0x3f));
            }
            
    //給剩下的字符進行編碼。
            if(pos<src.length){
                ch1
    =src.charCodeAt(pos++);
                str.push(
    this.enKey.charAt(ch1>>2));
                
    if(pos<src.length){
                    ch2
    =src.charCodeAt(pos);
                    str.push(
    this.enKey.charAt(((ch1<<4)+(ch2>>4))&0x3f));
                    str.push(
    this.enKey.charAt(ch2<<2&0x3f), '=');
                }
    else{
                    str.push(
    this.enKey.charAt(ch1<<4&0x3f), '==');
                }
            }
           
    //組合各編碼后的字符,連成一個字符串。
            return str.join('');
        },
        
    /**
         * 解碼。
         
    */
        decode: 
    function(src){
            
    //用一個數組來存放解碼后的字符。
            var str=new Array();
            
    var ch1, ch2, ch3, ch4;
            
    var pos=0;
           
    //過濾非法字符,并去掉'='。
            src=src.replace(/[^A-Za-z0-9\+\/]/g, '');
            
    //decode the source string in partition of per four characters.
            while(pos+4<=src.length){
                ch1
    =this.deKey[src.charCodeAt(pos++)];
                ch2
    =this.deKey[src.charCodeAt(pos++)];
                ch3
    =this.deKey[src.charCodeAt(pos++)];
                ch4
    =this.deKey[src.charCodeAt(pos++)];
                str.push(String.fromCharCode(
                    (ch1
    <<2&0xff)+(ch2>>4), (ch2<<4&0xff)+(ch3>>2), (ch3<<6&0xff)+ch4));
            }
            
    //給剩下的字符進行解碼。
            if(pos+1<src.length){
                ch1
    =this.deKey[src.charCodeAt(pos++)];
                ch2
    =this.deKey[src.charCodeAt(pos++)];
                
    if(pos<src.length){
                    ch3
    =this.deKey[src.charCodeAt(pos)];
                    str.push(String.fromCharCode((ch1
    <<2&0xff)+(ch2>>4), (ch2<<4&0xff)+(ch3>>2)));
                }
    else{
                    str.push(String.fromCharCode((ch1
    <<2&0xff)+(ch2>>4)));
                }
            }
           
    //組合各解碼后的字符,連成一個字符串。
            return str.join('');
        }
    };

    使用方法:

    var str='hello world!';
    var enstr=BASE64.encode(str);
    alert(enstr);
    var destr=BASE64.decode(enstr);
    alert(destr);
    posted on 2007-07-20 13:00 蘆葦 閱讀(1911) 評論(2)  編輯  收藏 所屬分類: HTML & Script

    Feedback

    # re: JavaScript 的 BASE64 算法 2008-08-01 03:54 ss
    覺得非常不錯。
      回復  更多評論
      

    # re: JavaScript 的 BASE64 算法 2012-07-25 09:35 Lou
    不支持中文!  回復  更多評論
      

    主站蜘蛛池模板: 宅男666在线永久免费观看| 成视频年人黄网站免费视频| 四虎免费久久影院| 久久精品国产亚洲AV天海翼| 毛片a级毛片免费观看品善网| 亚洲中文字幕无码中文| 妞干网手机免费视频| 中文有码亚洲制服av片| 最近中文字幕免费mv视频7| 亚洲午夜理论片在线观看| 青青草国产免费久久久下载| 亚洲国产精品自在自线观看| 日本特黄特色aa大片免费| 午夜免费国产体验区免费的| 国产亚洲日韩在线三区| 一级毛片免费观看不卡的| 亚洲人成网站在线观看播放动漫| 国产精品69白浆在线观看免费 | 国内一级一级毛片a免费| 亚洲人成77777在线观看网| 免费精品一区二区三区在线观看| 精品久久久久久久久亚洲偷窥女厕| 九月婷婷亚洲综合在线| 中国一级特黄高清免费的大片中国一级黄色片| 亚洲中文久久精品无码| 久久一区二区三区免费播放| 亚洲国产精品久久人人爱| 日本特黄a级高清免费大片| 中文字幕在线免费观看视频| 91亚洲国产成人久久精品网站| 无码一区二区三区免费视频 | 国产免费内射又粗又爽密桃视频| 亚洲国产精品无码一线岛国| 久久免费观看国产精品| 国产亚洲玖玖玖在线观看| 亚洲一级片内射网站在线观看| 99爱视频99爱在线观看免费| 亚洲精品无码国产片| 在线播放亚洲第一字幕| 成人浮力影院免费看| 大片免费观看92在线视频线视频|