<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
    不支持中文!  回復  更多評論
      

    主站蜘蛛池模板: 亚洲人成未满十八禁网站| 精品久久久久久亚洲中文字幕| xx视频在线永久免费观看| 亚洲中文字幕在线无码一区二区 | 无码精品人妻一区二区三区免费看 | 免费人妻精品一区二区三区| 亚洲男人的天堂在线va拉文 | 亚色九九九全国免费视频| 亚洲AV成人精品日韩一区| 亚洲精品无码高潮喷水在线| av免费不卡国产观看| 国产精品无码免费专区午夜| 亚洲狠狠狠一区二区三区| 四虎影视免费永久在线观看| 两个人的视频www免费| 国产精品亚洲自在线播放页码| 亚洲国产av一区二区三区| 182tv免费观看在线视频| 日本激情猛烈在线看免费观看| 亚洲国产电影在线观看| 国外亚洲成AV人片在线观看| 久草在视频免费福利| 成av免费大片黄在线观看 | 国产亚洲欧美在线观看| 亚洲国产精品第一区二区| 国产在线19禁免费观看国产| 亚洲成人免费网站| 男女一进一出抽搐免费视频| 亚洲最大无码中文字幕| 亚洲不卡中文字幕无码| 免费人成年激情视频在线观看 | 亚洲色成人中文字幕网站 | 亚洲国产精品成人综合久久久 | 亚洲情a成黄在线观看动漫尤物| 日韩免费在线观看| 51精品视频免费国产专区| 久久99久久成人免费播放| 精品在线视频免费| 99热亚洲色精品国产88| 亚洲精品免费在线观看| 亚洲欧洲国产精品香蕉网|