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

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

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

    空間站

    北極心空

      BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
      15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks
    /**
    * 我在網(wǎng)上看到過很多BASE64的JavaScript算法,都覺得不滿意,于是自己寫了一個,在這里分享一下。
    * 我的代碼在質(zhì)量的效率都較高,沒有一些冗余的操作。總體來講我覺得非常不錯。
    * 如果大家有什么不懂的地方可以問我。
    */
    var BASE64={
        
    /**
         * 此變量為編碼的key,每個字符的下標相對應于它所代表的編碼。
         
    */
        enKey: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
    +/',
        
    /**
         * 此變量為解碼的key,是一個數(shù)組,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){
            
    //用一個數(shù)組來存放編碼后的字符,效率比用字符串相加高很多。
            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){
            
    //用一個數(shù)組來存放解碼后的字符。
            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 蘆葦 閱讀(1910) 評論(2)  編輯  收藏 所屬分類: HTML & Script

    Feedback

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

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

    主站蜘蛛池模板: 亚洲色无码专区一区| 免费一级e一片在线播放| 中文字幕免费在线| 一个人看www在线高清免费看| 中国在线观看免费的www| 成全视频在线观看免费| 午夜毛片不卡高清免费| 毛片在线看免费版| 久久夜色精品国产嚕嚕亚洲av| 2021在线永久免费视频| 又大又黄又粗又爽的免费视频| 亚洲A∨无码无在线观看| 亚洲熟伦熟女专区hd高清| 中文字幕不卡免费视频| 成人性生免费视频| 免费一看一级毛片人| 日本特黄特色AAA大片免费| 日本zzzzwww大片免费| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 在线永久免费观看黄网站| 毛片a级三毛片免费播放| 亚洲色在线无码国产精品不卡| 九九精品成人免费国产片| 亚洲AⅤ视频一区二区三区| 亚洲婷婷综合色高清在线| 国产va免费精品| 拍拍拍又黄又爽无挡视频免费| 亚洲成a人片在线观看日本| 亚洲AV无码一区二区三区性色| 牛牛在线精品观看免费正| 国产美女亚洲精品久久久综合| 国产成人 亚洲欧洲| jizz免费观看| 亚洲特级aaaaaa毛片| 最近免费中文字幕MV在线视频3 | 国产又大又粗又长免费视频| 国产美女无遮挡免费网站| 亚洲91精品麻豆国产系列在线 | 亚洲人成人无码网www国产| 亚洲AV无码一区二区三区久久精品 | 综合自拍亚洲综合图不卡区|