javascript实现base64_encode加密,解密的方法

前端APP 投稿 8700 0 评论

javascript实现base64_encode加密,解密的方法

程序传参的过程中对参数的处理常见的有 urlencode rawurlencode 等等这些函数,但在实际操作中作者发现这些函数处理起来总是会出些问题,最常见的urlencode在网页一连串的跳转过程中传参对&这个符号总是处理的有问题。经试验,作者发现还是使用base64_encode加密然后传参来的靠谱。

在php中对字符串进行base64_encode加密处理很容易,而且有相应的base64_decode函数进行解密,在js中却没有响应的处理方法,下面就和大家分享一个在js中实现php语言中的base64_encode base64_decode的方法。


function base64encode(str{
    var out,i,len,base64EncodeChars="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    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,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;
    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;
}

代码摘抄自网上,但做了些改进,网上流传的一些代码声明了两个比较大的全局变量,相对起来来说对性能有一些影响。

javascript实现base64_encode加密,解密的函数压缩下载

代码实例参照:base64编码加密,解密

编程笔记 » javascript实现base64_encode加密,解密的方法

赞同 (36) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽