`
tuhaitao
  • 浏览: 375558 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

base64的js实现

阅读更多
写了一个js类,可以方便base64加密解密:

/**
*
*  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>


:)
分享到:
评论
7 楼 lu674035 2014-08-07  
这个非常靠谱,非常感谢分享!
6 楼 dhy9836 2013-07-21  
楼主好人啊。
5 楼 qianzhiyong 2013-05-20  
这个靠谱!!!
4 楼 tuhaitao 2013-03-27  
babycluo 写道
谢谢分享~~十分有用哈~

3 楼 babycluo 2013-03-19  
谢谢分享~~十分有用哈~
2 楼 tuhaitao 2010-06-16  
eivenchan 写道
这个js函数的Base64编码跟apache 的Base64处理类编码出来的结果不一样啊,
怎样的做到结果一样?

你的html与js文件都要是utf-8的编码才可以的,是编码问题
1 楼 eivenchan 2010-06-12  
这个js函数的Base64编码跟apache 的Base64处理类编码出来的结果不一样啊,
怎样的做到结果一样?

相关推荐

    JS 版本的base64函数实现(base64encode,base64decode)

    用js实现的base64encode,base64decode函数. 包括: function base64encode(str) { function base64decode(str) { function utf16to8(str) { function utf8to16(str) { function doit() {

    Base64的JavaScript实现js-base64.zip

    base64.js 是 Base64 的 JavaScript 实现。浏览器:[removed][removed]node.jsvar Base64 = require('./base64.js').Base64;示例:Base64.encode('dankogai'); // ZGFua29nYWk= Base64.encode('小飼弾'); // ...

    base64:js实现base64编码解码

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

    c# 用Base64实现文件上传

    下面就来演示一下,C#语言配合js,如何实现图片的base64格式上传与解析保存。  首先看一下前台是如何将文件读取到的,请先看如下js代码: var DataforUp = ; var reader = new FileReader(); //声明文件读取对象 ...

    JavaScript实现Base64编码转换

    Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64,所以每6个比特为一个单元,对应某个可打印字符。三个字节有24个比特,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。...

    js实现base64加密

    js实现base64加密

    js-base64, JavaScript的Base64实现.zip

    js-base64, JavaScript的Base64实现 base64.js另一个Base64转码器用法浏览器中的[removed][removed] node.jsvar Base64 = require('

    js对字符串进行base64转码/解码

    简单实现js对字符串进行base64转码/解码

    JavaScript版的PHP函数base64_encode与base64_decode

    用JavaScript实现PHP里的Base64编码与解码。 使用方法: encode64('要编码的字符串'); decode64('要解码的字符串');

    js实现多图片动态生成base64格式的gif图- 很久之前的资源,已失效,勿下载

    使用js实现,将多组图片动态生成gif图,base64格式,使用简单、速度也很快! var src=['imgs/1.jpg','imgs/2.jpg','imgs/3.jpg','imgs/4.jpg']; gifshot.createGIF({ gifWidth: 400, gifHeight: 400, images: src...

    js-base64:JavaScript的Base64实现

    base64.js 另一个转码器。当心在3.0版中, js-base64切换到ES2015模块,因此它不再与IE等旧版浏览器兼容(请参见下文)。 从3.3版开始,它是用TypeScript编写的。 现在base64.mjs从编译base64.ts然后base64.js从产生...

    json数据base64编码压缩+解压解码(java以及js)

    java端:返回类型非字符接口调用StringUtils#base64AndCompressJson进行编码压缩 ,返回类型为字符接口调用StringUtils#base64Andcompress js 端:引入压缩包中的js文件 ,调用deBase64AndUncompress进行解压解码

    Base64加密解密java/js

    参照网上Base64 js加密解密写的java实现,网上没看到出现过,可能大神都不屑写这种小东东,只好自己写了。弄了好几天,总算弄好了。 因为是参照 js Base64写的java实现,所以代码可实现前台js,后台java的加密,...

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

    本资源演示Delphi代码,实现javascript能正确进行Base64解码,不出现上述2个问题。 解决思路:进行Base64前先进行URL编码,在进行URL编码的时候,注意设置不需要SpaceAsPlus选项。 javascript代码: let ...

    js实现的Base64的加密解密方法

    用js写的Base64的加密解密方法。压缩包里有两个文件base64.js和base64Test.html。html页面是用来测试的。js代码大家可以直接用

    Javascript 实现Base64 + GZIP + AES 加解密

    crypto-js 和 pako实现数据加密, 解密

    base64加密解密-js-utf-8

    base64中文加密 注意中文编码为UTF-8

    JS 实现Base64编码与解码实例详解

    Js实现Base64编码与解码 Base64其实是一种简单的置换加密方式,但是BASE64的用处往往并不是为了防止信息泄露,而且为了方便传输,进过BASE64编码后的信息会比原始信息长,大概是4/3倍。 Base64是一种基于64个可打印...

Global site tag (gtag.js) - Google Analytics