base64的js實現

jopen 10年前發布 | 48K 次閱讀 JavaScript開發 BASE64


javascript代碼:

    /**   
    *   
    *  Base64 encode / decode   
    *   
    *  @author haitao.tu   
    *  @date   2010-04-26   
    *  @email  tuhaitao@foxmail.com   
    *   
    */    

    function Base64() {    

        // private property    
        _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";    

        // public method for encoding    
        this.encode = function (input) {    
            var output = "";    
            var chr1, chr2, chr3, enc1, enc2, enc3, enc4;    
            var i = 0;    
            input = _utf8_encode(input);    
            while (i < input.length) {    
                chr1 = input.charCodeAt(i++);    
                chr2 = input.charCodeAt(i++);    
                chr3 = input.charCodeAt(i++);    
                enc1 = chr1 >> 2;    
                enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);    
                enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);    
                enc4 = chr3 & 63;    
                if (isNaN(chr2)) {    
                    enc3 = enc4 = 64;    
                } else if (isNaN(chr3)) {    
                    enc4 = 64;    
                }    
                output = output +    
                _keyStr.charAt(enc1) + _keyStr.charAt(enc2) +    
                _keyStr.charAt(enc3) + _keyStr.charAt(enc4);    
            }    
            return output;    
        }    

        // public method for decoding    
        this.decode = function (input) {    
            var output = "";    
            var chr1, chr2, chr3;    
            var enc1, enc2, enc3, enc4;    
            var i = 0;    
            input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");    
            while (i < input.length) {    
                enc1 = _keyStr.indexOf(input.charAt(i++));    
                enc2 = _keyStr.indexOf(input.charAt(i++));    
                enc3 = _keyStr.indexOf(input.charAt(i++));    
                enc4 = _keyStr.indexOf(input.charAt(i++));    
                chr1 = (enc1 << 2) | (enc2 >> 4);    
                chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);    
                chr3 = ((enc3 & 3) << 6) | enc4;    
                output = output + String.fromCharCode(chr1);    
                if (enc3 != 64) {    
                    output = output + String.fromCharCode(chr2);    
                }    
                if (enc4 != 64) {    
                    output = output + String.fromCharCode(chr3);    
                }    
            }    
            output = _utf8_decode(output);    
            return output;    
        }    

        // private method for UTF-8 encoding    
        _utf8_encode = function (string) {    
            string = string.replace(/\r\n/g,"\n");    
            var utftext = "";    
            for (var n = 0; n < string.length; n++) {    
                var c = string.charCodeAt(n);    
                if (c < 128) {    
                    utftext += String.fromCharCode(c);    
                } else if((c > 127) && (c < 2048)) {    
                    utftext += String.fromCharCode((c >> 6) | 192);    
                    utftext += String.fromCharCode((c & 63) | 128);    
                } else {    
                    utftext += String.fromCharCode((c >> 12) | 224);    
                    utftext += String.fromCharCode(((c >> 6) & 63) | 128);    
                    utftext += String.fromCharCode((c & 63) | 128);    
                }    

            }    
            return utftext;    
        }    

        // private method for UTF-8 decoding    
        _utf8_decode = function (utftext) {    
            var string = "";    
            var i = 0;    
            var c = c1 = c2 = 0;    
            while ( i < utftext.length ) {    
                c = utftext.charCodeAt(i);    
                if (c < 128) {    
                    string += String.fromCharCode(c);    
                    i++;    
                } else if((c > 191) && (c < 224)) {    
                    c2 = utftext.charCodeAt(i+1);    
                    string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));    
                    i += 2;    
                } else {    
                    c2 = utftext.charCodeAt(i+1);    
                    c3 = utftext.charCodeAt(i+2);    
                    string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));    
                    i += 3;    
                }    
            }    
            return string;    
        }    
    }    
測試頁面
    <html>    
        <head>    
            <script src="lib/base64.js" type="text/javascript"></script>    
            <script type="text/javascript">    
                var b = new Base64();    
                var str = b.encode("admin:admin");    
                alert("base64 encode:" + str);    
                str = b.decode(str);    
                alert("base64 decode:" + str);    
            </script>    
        </head>    
        <body>    
        </body>    
    </html>    

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!