`
Relucent
  • 浏览: 209427 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Base64编码解码(JavaScript版本)

    博客分类:
  • JS
阅读更多
<html>
<HTML>
<HEAD>
<TITLE>Base64</TITLE>
<script type='text/javascript'>

var BASE64_ENCODE_CHARS = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var BASE64_DECODE_CHARS = [-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 encodeBase64(str) {
	var c1, c2, c3, i = 0, len = str.length, out=[];
	while (i < len) {
		c1 = str.charCodeAt(i++) & 0xff;
		if (i == len) {
			out.push(BASE64_ENCODE_CHARS.charAt(c1 >> 2));
			out.push(BASE64_ENCODE_CHARS.charAt((c1 & 0x3) << 4));
			out.push('==');
			break;
		}
		c2 = str.charCodeAt(i++);
		if (i == len) {
			out.push(BASE64_ENCODE_CHARS.charAt(c1 >> 2));
			out.push(BASE64_ENCODE_CHARS.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)));
			out.push(BASE64_ENCODE_CHARS.charAt((c2 & 0xF) << 2));
			out.push('=');
			break;
		}
		c3 = str.charCodeAt(i++);
		out.push(BASE64_ENCODE_CHARS.charAt(c1 >> 2));
		out.push(BASE64_ENCODE_CHARS.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)));
		out.push(BASE64_ENCODE_CHARS.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6)));
		out.push(BASE64_ENCODE_CHARS.charAt(c3 & 0x3F));
	}
	return out.join('');
}
function decodeBase64(str) {
	var c1, c2, c3, c4, i = 0, len = str.length, out=[];
	while (i < len) {
		/* c1 */
		do {
			c1 = BASE64_DECODE_CHARS[str.charCodeAt(i++) & 0xff];
		} while (i < len && c1 == -1);
		if (c1 == -1)
			break;
		/* c2 */
		do {
			c2 = BASE64_DECODE_CHARS[str.charCodeAt(i++) & 0xff];
		} while (i < len && c2 == -1);
		if (c2 == -1)
			break;
		out.push(String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4)));
		/* c3 */
		do {
			c3 = str.charCodeAt(i++) & 0xff;
			if (c3 == 61)
				return out.join('');
			c3 = BASE64_DECODE_CHARS[c3];
		} while (i < len && c3 == -1);
		if (c3 == -1)
			break;
		out.push(String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2)));
		/* c4 */
		do {
			c4 = str.charCodeAt(i++) & 0xff;
			if (c4 == 61)
				return out.join('');
			c4 = BASE64_DECODE_CHARS[c4];
		} while (i < len && c4 == -1);
		if (c4 == -1)
			break;
		out.push(String.fromCharCode(((c3 & 0x03) << 6) | c4));
	}
	return out.join('');
}
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 doIt() {
	var sourceValue = document.getElementById('source').value;
	document.getElementById('output').value = encodeBase64(utf16to8(sourceValue));
	document.getElementById('decode').value = utf8to16(decodeBase64(sourceValue));
}

</script>
<body>
Source :<br>
<textarea id="source" style='width:500;height:80;'></textarea><br><br>
base64 Encode :<br>
<textarea id="output" style='width:500;height:80;'></textarea><br><br>
base64 Eecode :<br>
<textarea id="decode" style='width:500;height:80;'></textarea><br><br>
<input type=button value="Transcoding" onclick="doIt()">
</body>
</html>

 

分享到:
评论

相关推荐

    java和js相互base64编码解码

    `调用.txt`文件可能是测试这两种编码解码方法的简单脚本,它会调用Java和JavaScript中的函数,并比较结果是否一致,确保在不同环境下的Base64编码和解码是兼容的。 总之,Java和JavaScript中Base64编码和解码的实现...

    Delphi Base64编码,javascript解码汉字乱码解决方法演示程序(源代码)

    Delphi进行Base64编码后,如果使用javascript解码,会出现如下问题: 1. 汉字乱码 2. 空格变成 + 号 本资源演示Delphi代码,实现javascript能正确进行Base64解码,不出现上述2个问题。 解决思路:进行Base64前先...

    base64编码解码器

    这个"base64编码解码器"是一个工具,能够对文件进行Base64编码和解码操作,方便用户处理二进制数据。 1. **Base64编码原理** - Base64编码源于ASCII字符集,使用了64个字符来表示二进制数据,这64个字符包括大小写...

    Base64 编码解码工具

    "Base64 编码解码工具"是一个应用程序,它提供了一个方便的界面来对数据进行Base64的编码和解码操作。尽管这个工具非常实用,但需要注意的是,根据描述,它并不支持对文件进行编码或解码。这意味着你可以输入纯文本...

    Base64编码解码

    在描述中提到的"Base64编码解码实例,全注释,可运行",意味着提供了一个包含完整注释的代码示例,可以用来进行Base64编码和解码操作。这个实例可能是用某种编程语言(如Python、Java、JavaScript等)编写的,可以...

    base64编码解码源码

    Base64编码是一种广泛用于网络数据传输和存储的编码方式,它将任意二进制数据转化为可...通过对这些源码的学习,你可以了解不同编程环境下Base64操作的细节,加深对编码解码原理的理解,并可能为自己的项目提供参考。

    QT图片BAse64编码与解码

    QT图片Base64编码与解码是C++编程中一种常见的技术,特别是在处理网络传输或者存储图片数据时。Base64是一种将二进制数据转换为可打印ASCII字符的编码方式,它通过特定的算法将每3个字节的数据转换为4个ASCII字符,...

    Base64 编码和解码

    在JavaScript中,Base64编码和解码是经常用到的功能,尤其是在处理图像、JSON数据或者进行跨平台通信时。 ### Base64编码原理 Base64编码的基本思想是将每3个字节(24位)的数据转换为4个6位的字符(共24位),然后...

    JS端与java(android)端3DES加密解密和Base64编码解码文件

    本文将深入探讨如何在JavaScript(JS)客户端和Java(Android)端实现3DES加密解密以及Base64编码解码,这对于保护用户敏感信息和实现安全通信至关重要。 首先,3DES(Triple Data Encryption Standard)是一种加强...

    Base64编码和解码的应用(前后端程序)

    在后端,Base64解码则是将接收到的Base64编码字符串还原成原始二进制数据。 **Base64编码原理** Base64编码基于64个可打印的ASCII字符,这些字符包括大小写字母、数字以及"+"和"/",还有一个特殊字符"="用于填充。...

    3des加密解密base64编码解码完全与ASP.NET,JAVA,兼容的js

    本资源提供的是一套完整的JavaScript实现,能够与ASP.NET和JAVA平台的3DES加密解密及Base64编码解码功能保持兼容。 首先,3DES的工作原理是在DES的基础上增加了一次加密过程,即使用同一个密钥进行三次加密,这大大...

    base64编码解码程序

    综上所述,"base64编码解码程序"涉及到的不仅是Base64编码的基本原理和操作,还包括了如何处理包含中文在内的多字节字符,以及在实际应用中的场景和注意事项。理解和掌握这些知识点对于进行数据传输和处理工作是非常...

    javascript base64编码解码函数

    javascript版本的 base64解码和编码函数。

    js对图片base64编码字符串进行解码并输出图像示例

    在本示例中,我们讨论的是如何使用JavaScript对基于Base64编码的图片进行解码并显示在网页上。Base64是一种用于将二进制数据编码为ASCII字符串的编码方式,它在传输或存储非文本数据时非常有用,例如图片。 在HTML...

    base64编码工具

    在"Release"文件中,通常包含了该Base64编码工具的正式版本,可能包括可执行文件、安装程序或者源代码。这些文件可供用户下载并使用,或者开发者进行二次开发或调试。对于用户而言,只需按照提供的说明运行或安装...

    javascript处理中文base64编码

    总结来说,处理JavaScript中的中文Base64编码,关键在于正确地转换中文字符串到UTF-8字节数组,再进行Base64编码和解码。利用`TextEncoder` 和 `TextDecoder` API,或者Node.js的`Buffer`对象,可以有效地处理这个...

    jquery base64编码解码插件

    **jQuery Base64编码解码插件** 在Web开发中,数据传输是不可或缺的一部分,而Base64编码作为一种常见的数据编码方式,常用于在HTTP环境下传递包含非ASCII字符的字符串,比如图片数据、JSON对象等。`jquery.base64....

    CSharp(c#)Base64编码解码

    - 在Web开发中,Base64编码常用于在CSS中嵌入图片,或者在JavaScript中传递二进制数据。 6. **注意点** - Base64编码会使数据长度增加约33%,因为每个6位的二进制数据被转换成了8位的ASCII字符。 - 编码后的字符...

    js 显示base64编码的二进制流网页图片

    而在JavaScript中,可以使用btoa()函数对字符串进行Base64编码,以及atob()函数对Base64编码的字符串进行解码。 关于浏览器对Base64编码数据的支持,当前主流浏览器如IE8、Firefox、Chrome和Opera等都已经支持Data ...

    base64:js实现base64编码解码

    js实现base64编码解码 base64编码原理: base64可编码范围(ASCII字符范围内\u0000-\u00ff),所以每个字符必须8位,以3个字符为一组,转换为6bit的字节(3*8=4*6=24). 在每个6bit字节的高位添加0组成8bit的字节,然后将每8...

Global site tag (gtag.js) - Google Analytics