<html> 
<head> 
<title>base64 Encoding/Decoding</title> 
</head> <script type="text/javascript"><!-- var keyStr = "ABCDEFGHIJKLMNOP" + 
"QRSTUVWXYZabcdef" + 
"ghijklmnopqrstuv" + 
"wxyz0123456789+/" + 
"="; function encode64(input) { 
input = escape(input); 
var output = ""; 
var chr1, chr2, chr3 = ""; 
var enc1, enc2, enc3, enc4 = ""; 
var i = 0; do { 
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); 
chr1 = chr2 = chr3 = ""; 
enc1 = enc2 = enc3 = enc4 = ""; 
} while (i < input.length); return output; 
} function decode64(input) { 
var output = ""; 
var chr1, chr2, chr3 = ""; 
var enc1, enc2, enc3, enc4 = ""; 
var i = 0; // remove all characters that are not A-Z, a-z, 0-9, +, /, or = 
var base64test = /[^A-Za-z0-9\+\/\=]/g; 
if (base64test.exec(input)) { 
alert("There were invalid base64 characters in the input text.\n" + 
"Valid base64 characters are A-Z, a-z, 0-9, '+', '/', and '='\n" + 
"Expect errors in decoding."); 

input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); do { 
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); 
} chr1 = chr2 = chr3 = ""; 
enc1 = enc2 = enc3 = enc4 = ""; } while (i < input.length); return unescape(output); 
} //--></script> <body> <form name="base64Form"> Type in the message you want to encode in base64, or paste<br> 
base64 encoded text into the text field, select Encode or Decode, <br> 
and click the button!<br> <textarea name="theText" cols="40" rows="6"></textarea><br> <input type="button" name="encode" value="Encode to base64" 
onClick="document.base64Form.theText.value=encode64(document.base64Form.theText.value);"> 
<input type="button" name="decode" value="Decode from base64" 
onClick="document.base64Form.theText.value=decode64(document.base64Form.theText.value);"> </form> </body> 
</html>

解决方案 »

  1.   

    <HTML><HEAD><TITLE>Test Base 64</TITLE>
    <META http-equiv=Content-Type content="text/html; charset=gb2312">
    <META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD>
    <BODY><TEXTAREA id=original style="WIDTH: 100%" rows=10>博客园</TEXTAREA><BUTTON onclick=Run()>encode</BUTTON> <TEXTAREA id=encode style="WIDTH: 100%" rows=10></TEXTAREA>
    <SCRIPT language=javascript>
    function Run()
    {
        var originalString = original.value;
        encode.value = EncodeBase64(originalString);
    }
    var Base64Alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q',
        'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
        'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'];
    function EncodeBase64(string)
    {
        var hexString = string.getGBCode();
        window.status = hexString; 
        var base64 = '';
        var B64A = Base64Alphabet;
        var padCount = hexString.length%3;
        var count = parseInt(hexString.length/6);
        var i = 0; 
        for ( i=0 ; i < count ; ++i )
        {
             var intA = parseInt(hexString.charAt(i*6+0)+hexString.charAt(i*6+1), 16);
             var intB = parseInt(hexString.charAt(i*6+2)+hexString.charAt(i*6+3), 16);
             var intC = parseInt(hexString.charAt(i*6+4)+hexString.charAt(i*6+5), 16); 
             var part1 = intA >> 2;
             var part2 = ((intA & 0x03) << 4) | (intB >> 4);
             var part3 = ((intB & 0x0f) << 2) | (intC >> 6);
             var part4 = intC & 0x3f;
             base64 += B64A[part1] + B64A[part2] + B64A[part3] + B64A[part4]; 
        }
        if ( padCount == 1 )
        {
             var intA = parseInt(hexString.charAt(i*6+0)+hexString.charAt(i*6+1), 16);
             var intB = parseInt(hexString.charAt(i*6+2)+hexString.charAt(i*6+3), 16);
             var part1 = intA >> 2;
             var part2 = ((intA & 0x03) << 4) | (intB >> 4);
             var part3 = ((intB & 0x0f) << 2);
             base64 += B64A[part1] + B64A[part2] + B64A[part3] + '=';
        }
        if ( padCount == 2 )
        {
             var intA = parseInt(hexString.charAt(i*6+0)+hexString.charAt(i*6+1), 16);
             var part1 = intA >> 2;
             var part2 = ((intA & 0x03) << 4);
             base64 += B64A[part1] + B64A[part2] + '==';
        }        
        return base64;
    }
    </SCRIPT><SCRIPT language=vbscript>
    function vbGetGBCode(str)
        dim i, length, s
        length = len(str)
        for i=1 to length
            hexCode = hex(asc(str.charAt(i-1)))
            if (len(hexCode) mod 2) = 0 then
                s = s & hexCode
            else
                s = s & "0" & hexCode
            end if
        next
        vbGetGBCode = s
    end function
    </SCRIPT><SCRIPT language=javascript>
    String.prototype.getGBCode = function()
    {
        return vbGetGBCode(this);
    }
    </SCRIPT>
     </BODY></HTML>
      

  2.   

    谢谢 ttyp(@http://www.cnblogs.com/ttyp/) ,能否再给出解码程序。
      

  3.   

    ttyp(@http://www.cnblogs.com/ttyp/) 帮帮忙,给个解码程序吧!
      

  4.   

    转贴的:
    <html>
    <head>
    </head>
    <body bgcolor="#fef4d9">
    <script language=javascript>
    var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    var base64DecodeChars = 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, -1, 62, -1, -1, -1, 63,
        52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
        -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
        15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
        -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
        41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);function base64encode(str) {
        var out, i, len;
        var c1, c2, c3;    len = str.length;
        i = 0;
        out = "";
        while(i < len) {
    c1 = str.charCodeAt(i++) & 0xff;
    if(i == len)
    {
        out += base64EncodeChars.charAt(c1 >> 2);
        out += base64EncodeChars.charAt((c1 & 0x3) << 4);
        out += "==";
        break;
    }
    c2 = str.charCodeAt(i++);
    if(i == len)
    {
        out += base64EncodeChars.charAt(c1 >> 2);
        out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
        out += base64EncodeChars.charAt((c2 & 0xF) << 2);
        out += "=";
        break;
    }
    c3 = str.charCodeAt(i++);
    out += base64EncodeChars.charAt(c1 >> 2);
    out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
    out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
    out += base64EncodeChars.charAt(c3 & 0x3F);
        }
        return out;
    }function base64decode(str) {
        var c1, c2, c3, c4;
        var i, len, out;    len = str.length;
        i = 0;
        out = "";
        while(i < len) {
    /* c1 */
    do {
        c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
    } while(i < len && c1 == -1);
    if(c1 == -1)
        break; /* c2 */
    do {
        c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
    } while(i < len && c2 == -1);
    if(c2 == -1)
        break; out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4)); /* c3 */
    do {
        c3 = str.charCodeAt(i++) & 0xff;
        if(c3 == 61)
    return out;
        c3 = base64DecodeChars[c3];
    } while(i < len && c3 == -1);
    if(c3 == -1)
        break; out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2)); /* c4 */
    do {
        c4 = str.charCodeAt(i++) & 0xff;
        if(c4 == 61)
    return out;
        c4 = base64DecodeChars[c4];
    } while(i < len && c4 == -1);
    if(c4 == -1)
        break;
    out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
        }
        return out;
    }function utf16to8(str) {
        var out, i, len, c;    out = "";
        len = str.length;
        for(i = 0; i < len; i++) {
    c = str.charCodeAt(i);
    if ((c >= 0x0001) && (c <= 0x007F)) {
        out += str.charAt(i);
    } else if (c > 0x07FF) {
        out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F));
        out += String.fromCharCode(0x80 | ((c >>  6) & 0x3F));
        out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));
    } else {
        out += String.fromCharCode(0xC0 | ((c >>  6) & 0x1F));
        out += String.fromCharCode(0x80 | ((c >>  0) & 0x3F));
    }
        }
        return out;
    }function utf8to16(str) {
        var out, i, len, c;
        var char2, char3;    out = "";
        len = str.length;
        i = 0;
        while(i < len) {
    c = str.charCodeAt(i++);
    switch(c >> 4)

      case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
        // 0xxxxxxx
        out += str.charAt(i-1);
        break;
      case 12: case 13:
        // 110x xxxx   10xx xxxx
        char2 = str.charCodeAt(i++);
        out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
        break;
      case 14:
        // 1110 xxxx  10xx xxxx  10xx xxxx
        char2 = str.charCodeAt(i++);
        char3 = str.charCodeAt(i++);
        out += String.fromCharCode(((c & 0x0F) << 12) |
       ((char2 & 0x3F) << 6) |
       ((char3 & 0x3F) << 0));
        break;
    }
        }    return out;
    }
    function doit1() {
        var f = document.f
        f.output.value = base64encode(utf16to8(f.source.value))
    }
    function doit2() {
        var f = document.f
        f.output.value = utf8to16(base64decode(f.source.value))
    }
    </script>
    <FORM NAME="f">
    <TEXTAREA NAME="source" ROWS=6 COLS=80 WRAP="soft"></TEXTAREA><BR>
    <INPUT TYPE=BUTTON VALUE="Base64 encode" ONCLICK="doit1()">
    <INPUT TYPE=BUTTON VALUE="Base64 decode" ONCLICK="doit2()">
    <br>
    <TEXTAREA NAME="output" ROWS=6 COLS=80 WRAP="soft"></TEXTAREA><BR><BR>
    </FORM>
    </td></tr>
    </table></center>
    </body>
    </html>
      

  5.   

    这里又有一个完整的:http://zhilee.aehk.com/demo/TestBase64.htm
      

  6.   

    等待cuixiping(无心)的方法!
    谢谢donghid(想得太多,快要疯掉了!神哪,让我静下来),你这个地址http://zhilee.aehk.com/demo/TestBase64.htm的程序是对的。
      

  7.   

    <!-- 坚决抵制日货 -->
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    <head>
    <title> 用 XMLDOM 和 ADODB.Stream 实现base64编码解码 </title>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <style type="text/css" title="">
    #textarea1,#textarea3,#textarea5 { background-color: #EEEEEE; }
    </style>
    </head><body><h3>用 XMLDOM 和 ADODB.Stream 实现base64编码解码</h3>
    <h5>By: CuiXiPing(无心)</h5><h4>1.对文件的base64编码</h4><input type="file" name="file1" id="file1" size="50" readOnly>
    <input type="button" value="base64编码" onclick="if(!file1.value){alert('请选择文件')}else{textarea1.value=Base64EncodeFile(file1.value)}">
    <br>
    <textarea id="textarea1" rows="6" cols="80" readOnly></textarea><h4>2.对文本的base64编码</h4><input type="button" value="base64编码" onclick="textarea3.value=Base64EncodeText(textarea2.value)">
    <br>
    <textarea id="textarea2" rows="4" cols="40">坚决抵制日货</textarea>
    <textarea id="textarea3" rows="4" cols="40" readOnly></textarea><h4>3.对文本的base64解码</h4><input type="button" value="base64解码" onclick="textarea5.value=Base64DecodeText(textarea4.value)">
    <br>
    <textarea id="textarea4" rows="4" cols="40">vOG+9rXW1sbI1bv1</textarea>
    <textarea id="textarea5" rows="4" cols="40" readOnly></textarea><script language="javaScript">
    <!--
    function Base64EncodeFile(fileSpec){
    var xml_dom = new ActiveXObject("MSXML2.DOMDocument");
    var ado_stream = new ActiveXObject("ADODB.Stream");
    var tmpNode = xml_dom.createElement("tmpNode");
    tmpNode.dataType = "bin.base64"; ado_stream.Type = 1;       // 1=adTypeBinary 
    if(ado_stream.state==0){  // 0=adStateClosed  1=adStateOpen
    ado_stream.Open();
    }
    ado_stream.LoadFromFile(fileSpec);
    tmpNode.nodeTypedValue = ado_stream.Read(-1);      // -1=adReadAll
    ado_stream.Close(); return tmpNode.text;
    }
    function Base64EncodeText(TextStr){
    var xml_dom = new ActiveXObject("MSXML2.DOMDocument");
    var ado_stream = new ActiveXObject("ADODB.Stream");
    var tmpNode = xml_dom.createElement("tmpNode");
    tmpNode.dataType = "bin.base64"; ado_stream.Charset = "gb2312";
    ado_stream.Type = 2;       // 1=adTypeBinary 2=adTypeText
    if(ado_stream.state==0){   // 0=adStateClosed  1=adStateOpen
    ado_stream.Open();
    }
    ado_stream.WriteText(TextStr);
    ado_stream.Position = 0;
    ado_stream.Type = 1;       // 1=adTypeBinary 2=adTypeText
    tmpNode.nodeTypedValue = ado_stream.Read(-1);      // -1=adReadAll
    ado_stream.Close(); return tmpNode.text;
    }
    function Base64DecodeText(Base64Str){
    var xml_dom = new ActiveXObject("MSXML2.DOMDocument");
    var ado_stream = new ActiveXObject("ADODB.Stream");
    var tmpNode = xml_dom.createElement("tmpNode");
    tmpNode.dataType = "bin.base64";
    tmpNode.text = Base64Str; ado_stream.Charset = "gb2312";
    ado_stream.Type = 1;       // 1=adTypeBinary 2=adTypeText
    ado_stream.Open();
    ado_stream.Write(tmpNode.nodeTypedValue);
    ado_stream.Position = 0;
    ado_stream.Type = 2;       // 1=adTypeBinary 2=adTypeText
    var str = ado_stream.ReadText(-1);      // -1=adReadAll
    ado_stream.Close(); return str;
    }
    //-->
    </script></body>
    </html>
      

  8.   

    cuixiping(无心)的我测试了一下,好像JS有问题,58行,服务器不能创建对象。
    不过cuixiping(无心)的方法倒是第一次看到,贴出来了,相信应该是能实现的。
    有可能 的话cuixiping(无心)最好能帮忙看看,我58行怎么会出错的。
      

  9.   

    1。确定装了ADO2.7以上, MSXML4以上
       判断方法:看看你的注册表里面有没有
            HKEY_CLASSES_ROOT\ADODB.Stream
            HKEY_CLASSES_ROOT\MSXML2.DOMDocument2。确定IE权限可执行它(或者改成.hta文件打开).=================
    我本机运行正常。