javascript 基于Base64加密解密

< META  http-equiv =Content-Type  content ="text/html; charset=gb2312" >
< 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-162-1-1-163,
  
52535455565758596061-1-1-1-1-1-1,
  
-1, 0, 1, 2, 3,  4, 5, 6, 7, 8, 91011121314,
  
1516171819202122232425-1-1-1-1-1,
  
-1262728293031323334353637383940,
  
4142434445464748495051-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 0case 1case 2case 3case 4case 5case 6case 7:
   
// 0xxxxxxx
   out += str.charAt(i-1);
   
break;
  
case 12case 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 f = document.f
  f.output.value 
= base64encode(utf16to8(f.source.value))
  f.decode.value 
= utf8to16(base64decode(f.output.value))
}

</ SCRIPT >

< META  content ="MSHTML 6.00.2900.2963"  name =GENERATOR ></ HEAD >
< BODY >
< H1 > Base64 </ H1 >
< FORM 
name =f > 原码 < BR >< TEXTAREA  name =source  rows =4  cols =60 ></ TEXTAREA >< BR >< BR > Base64 
encode
< BR >< TEXTAREA  name =output  rows =4  cols =60 ></ TEXTAREA >< BR >< BR > Base64 
decode
< BR >< TEXTAREA  name =decode  rows =4  cols =60 ></ TEXTAREA >< BR >< BR >< INPUT  onclick =doit()  type =button  value =转换 >  
</ FORM ></ BODY >
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值