麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

JS 實現(xiàn)BASE64_ENCODE和BASE64_DECODE(實例代碼)

2019-11-20 21:43:21
字體:
供稿:網(wǎng)友

Base64是一種基于64個可打印字符來表示二進制數(shù)據(jù)的表示方法。由于2的6次方等于64,所以每6個比特為一個單元,對應(yīng)某個可打印字符。三個字節(jié)有24個比特,對應(yīng)于4個Base64單元,即3個字節(jié)需要用4個可打印字符來表示。它可用來作為電子郵件的傳輸編碼。在Base64中的可打印字符包括字母A-Z、a-z、數(shù)字0-9 ,這樣共有62個字符,此外兩個可打印符號在不同的系統(tǒng)中而不同(本類庫里面用的是`+`,`/`這兩個字符)。一些如uuencode的其他編碼方法,和之后binhex的版本使用不同的64字符集來代表6個二進制數(shù)字,但是它們不叫Base64。
Base64常用于在通常處理文本數(shù)據(jù)的場合,表示、傳輸、存儲一些二進制數(shù)據(jù)。包括MIME的email,email via MIME, 在XML中存儲復(fù)雜數(shù)據(jù)。
Base64其實是一種簡單的置換加密方式,但是BASE64的用處往往并不是為了防止信息泄露,而且為了方便傳輸,進過BASE64編碼后的信息會比原始信息長,大概是4/3倍。

實現(xiàn)代碼一、測試可以用

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);/** * base64編碼 * @param {Object} str */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;}/** * base64解碼 * @param {Object} str */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;}/** * utf16轉(zhuǎn)utf8 * @param {Object} str */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;}/** * utf8轉(zhuǎn)utf16 * @param {Object} str */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 xxxx10xx xxxx10xx xxxx                char2 = str.charCodeAt(i++);                char3 = str.charCodeAt(i++);                out += String.fromCharCode(((c & 0x0F) << 12) | ((char2 & 0x3F) << 6) | ((char3 & 0x3F) << 0));                break;        }    }    return out;}//demo//function doit(){//    var f = document.f;//    f.output.value = base64encode(utf16to8(f.source.value));//    f.decode.value = utf8to16(base64decode(f.output.value));//}

功能分割版,就是將兩個js函數(shù)分別寫出來

Javascript的base64加密函數(shù)和base64解密函數(shù),仿PHP base64_encode()和base64_decode().附實例。可以將js代碼保存到base64.js中,在需要的時候調(diào)用。
注意:base64加密和解密有固有的算,請不要改動以下代碼,否則可能導(dǎo)致程序出錯,或者無法獲取到正確的結(jié)果。
為了保證代碼的正確性,請下載附件base64.js (沒有實例),而不要直接復(fù)制本頁代碼。

base64加密代碼

    function base64_encode(str){        var c1, c2, c3;        var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";                var i = 0, len= str.length, string = '';        while (i < len){            c1 = str.charCodeAt(i++) & 0xff;            if (i == len){                string += base64EncodeChars.charAt(c1 >> 2);                string += base64EncodeChars.charAt((c1 & 0x3) << 4);                string += "==";                break;            }            c2 = str.charCodeAt(i++);            if (i == len){                string += base64EncodeChars.charAt(c1 >> 2);                string += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));                string += base64EncodeChars.charAt((c2 & 0xF) << 2);                string += "=";                break;            }            c3 = str.charCodeAt(i++);            string += base64EncodeChars.charAt(c1 >> 2);            string += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4));            string += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6));            string += base64EncodeChars.charAt(c3 & 0x3F)        }            return string    }

base64解密啊代碼

function base64_decode(str){        var c1, c2, c3, c4;        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        );        var i=0, len = str.length, string = '';        while (i < len){            do{                c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff]            } while (                i < len && c1 == -1            );            if (c1 == -1) break;            do{                c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff]            } while (                i < len && c2 == -1            );            if (c2 == -1) break;            string += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));            do{                c3 = str.charCodeAt(i++) & 0xff;                if (c3 == 61)                    return string;                c3 = base64DecodeChars[c3]            } while (                i < len && c3 == -1            );            if (c3 == -1) break;            string += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));            do{                c4 = str.charCodeAt(i++) & 0xff;                if (c4 == 61) return string;                c4 = base64DecodeChars[c4]            } while (                i < len && c4 == -1            );            if (c4 == -1) break;            string += String.fromCharCode(((c3 & 0x03) << 6) | c4)        }        return string;    }

上面代碼的測試代碼

 document.write(base64_encode('www.companysz.com'));    document.write('<br />');    document.write(base64_decode('aHR0cDovL3d3dy5qYjUxLm5ldA==')); 

實現(xiàn)代碼二:針對utf8

<script language='javascript'>/* utf.js - UTF-8 <=> UTF-16 convertion** Copyright (C) 1999 Masanao Izumo <[email protected]>* Version: 1.0* LastModified: Dec 25 1999* This library is free. You can redistribute it and/or modify it.*//** Interfaces:* utf8 = utf16to8(utf16);* utf16 = utf16to8(utf8);*/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;}/* Copyright (C) 1999 Masanao Izumo <[email protected]>* Version: 1.0* LastModified: Dec 25 1999* This library is free. You can redistribute it and/or modify it.*//** Interfaces:* b64 = base64encode(data);* data = base64decode(b64);*/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;}//input base64 encodefunction strdecode(str){   return utf8to16(base64decode(str));}

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 久久久久久久一区二区三区 | 久久久久久久久久性 | 成人免费看毛片 | 国产精品爱久久久久久久 | 一区二区三区黄色 | aaaaa国产欧美一区二区 | 色婷婷久久久亚洲一区二区三区 | 久久亚洲精品久久国产一区二区 | www.guochan| 欧美久久久久久久久 | 精品一区二区三区电影 | 欧美日韩免费一区 | 久久国产精品免费视频 | 日韩在线激情 | 玖玖视频精品 | 亚洲精华液久久含羞草 | 欧美大荫蒂xxx | 一级毛片免费大片 | 久久久久久久久久久国产精品 | 看片一区二区三区 | 成人午夜精品久久久久久久3d | 免费看黄色一级大片 | 午夜国产小视频 | 国产精品一区二区三区在线播放 | 红杏网站永久免费视频入口 | 婷婷久久青草热一区二区 | 国产精品一区在线看 | 亚洲综合视频在线播放 | 欧美a∨一区二区三区久久黄 | 免费播放欧美毛片 | 亚洲一区二区中文字幕在线观看 | 国产精品呻吟 | 99爱视频在线观看 | 亚洲性在线视频 | 国产精品久久久久久久久久大牛 | 少妇一级淫片高潮流水电影 | 亚洲5区 | 中文字幕国产日韩 | 国产一级淫片在线观看 | av在线高清观看 | 午夜a狂野欧美一区二区 |