Javascript Base64编码与解码

原文:【转】Javascript Base64编码与解码

<html>
<head>
<META HTTP-EQUIV="MSThemeCompatible" CONTENT="Yes">
<meta http-equiv="Content-Type" content="text/html; charset=unicode">
<script language="JavaScript" type="text/javascript" src="../var.js"></script>
<title>Base64 Encode and Decode</title>
<style>
</style>
<script type="text/javascript" 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 CharToHex(str) {
    var out, i, len, c, h;

    out = "";
    len = str.length;
    i = 0;
    while(i < len)
    {
        c = str.charCodeAt(i++);
        h = c.toString(16);
        if(h.length < 2)
            h = "0" + h;

        out += "\\x" + h + " ";
        if(i > 0 && i % 8 == 0)
            out += "\r\n";
    }

    return out;
}

function doEncode() {
    var src = document.getElementById(‘src‘).value;
    document.getElementById(‘dest‘).value = base64encode(utf16to8(src));
}

function doDecode() {
    var src = document.getElementById(‘src‘).value;
    var opts = document.getElementById(‘opt‘);

    if(opts.checked)
    {
        document.getElementById(‘dest‘).value = CharToHex(base64decode(src));
    }
    else
    {
        document.getElementById(‘dest‘).value = utf8to16(base64decode(src));
    }
}

</script>
</head>

<BODY bgcolor="#EAF0F8" topmargin="10" leftmargin="10" rightmargin="10" bottommargin="10">
<div id="contain" style="font-family: Tahoma, Arial; font-size:11pt">
  <div id="mainbg">
    <div style="color: #000080; margin-bottom: 10"><b>Base64 Encode / Decode</b></div>
    <div>
      <textarea id="src" rows=11 cols=60 value="" name="src"></textarea>
      <div style="margin: 10 0 10 0">
      <input onclick="doEncode();" type=button value="Encode" name="encode">&nbsp;
      <input onclick="doDecode();" type=button value="Decode" name="decode">&nbsp;
      <input type="checkbox" value="hex" name="opt" id="opt">Hex&nbsp;
      </div>
      <textarea id="dest" rows=11 cols=60 value="" name="dest"></textarea>
    </div>
    </div>
</div>
</BODY>
</html>
时间: 2024-08-24 19:41:19

Javascript Base64编码与解码的相关文章

转: Javascript Base64编码与解码

Javascript Base64编码与解码 分类:            JavaScript            2015-02-04 14:25    212人阅读    评论(0)    收藏    举报 转自:http://blog.csdn.net/yanzhibo/article/details/20079943 [javascript] view plaincopy <html> <head> <META HTTP-EQUIV="MSThemeCo

win api 实现 base64编码、解码

最近在写小玩意,用到了base64编码,但是考虑到体积大小,网上的多种实现都是利用开源的代码,这就增加了其大小.我想win api能不能实现base64编码.解码.通过一通乱搜,还有收获.就有了以下代码 #pragma comment(lib,"crypt32.lib") LPSTR Base64Encode(LPBYTE lpBuffer,DWORD dwLen) { DWORD dwNeed; LPSTR lpBase64Str ; DWORD dwIndex ; DWORD dw

base64编码、解码的C语言实现

转自:http://www.cnblogs.com/yejianfei/archive/2013/04/06/3002838.html base64是一种基于64个可打印字符来表示二进制数据的表示方法.由于26=64,所以每6位为一个单位,对应某个可打印字符.三个字节共24位,对应于4个base64单位,即3个字节需要用4个可打印字符来表示.它常用来作为电子邮件的传输编码.在base64中的可打印字符包括大写英文字母A-Z,小写英文字母a-z.阿拉伯数字0-9,这样共有62个字符,此外两个可打印

python中base64编码与解码

引言: 在一些项目中,接口的报文是通过base64加密传输的,所以在进行接口自动化时,需要对所传的参数进行base64编码,对拿到的响应报文进行解码: Base64编码是一种"防君子不防小人"的编码方式.广泛应用于MIME协议,作为电子邮件的传输编码,生成的编码可逆,后一两位可能有"=",生成的编码都是ascii字符.优点:速度快,ascii字符,肉眼不可理解缺点:编码比较长,非常容易被破解,仅适用于加密非关键信息的场合python2中进行Base64编码和解码&g

PHP安全的URL字符串base64编码和解码

这篇文章主要介绍了PHP安全的URL字符串base64编码和解码,在base64的基础上替换了不安全的一些字符,需要的朋友可以参考下 如果直接使用base64_encode和base64_decode方法的话,生成的字符串可能不适用URL地址.下面的方法可以解决该问题: URL安全的字符串编码: function urlsafe_b64encode($string) {    $data = base64_encode($string);    $data = str_replace(array

java利用Base64编码和解码图片文件

1.编码与解码代码如下所示: import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import javax.image

Python中进行Base64编码和解码

Base64编码是一种“防君子不防小人”的编码方式.广泛应用于MIME协议,作为电子邮件的传输编码,生成的编码可逆,后一两位可能有“=”,生成的编码都是ascii字符.优点:速度快,ascii字符,肉眼不可理解缺点:编码比较长,非常容易被破解,仅适用于加密非关键信息的场合Python中进行Base64编码和解码>>> import base64>>> s = '我是字符串'>>> a = base64.b64encode(s)>>>

android Java BASE64编码和解码二:图片的编码和解码

1.准备工作 (1)在项目中集成 Base64 代码,集成方法见第一篇博文:android Java BASE64编码和解码一:基础 (2)添加 ImgHelper 工具类 package com.app21; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.IOException; import android.graphics.Bitmap; import android

JavaScript: 详解Base64编码和解码

转载自:http://my.oschina.net/goal/blog/201032#OSC_h2_11 摘要 Base64是最常用的编码之一,比如开发中用于传递参数.现代浏览器中的<img />标签直接通过Base64字符串来渲染图片以及用于邮件中等等.Base64编码在RFC2045中定义,它被定义为:Base64内容传送编码被设计用来把任意序列的8位字节描述为一种不易被人直接识别的形式. JavaScript Base64 Unicode UTF16 UTF8 编码 目录[-] 字符编码