JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码)

下面是详细的讲解。

概述

在前端开发中,我们经常需要对数据进行加密传输或者解密处理,其中Base64编码算法是一种经常被使用的编码方式。本文将讲解如何使用JavaScript实现Base64编解码的实现方法,并附带实例代码。

Base64编码原理

Base64是一种常用的编码算法,可以将数据进行编码,常用于传输数据或者在文本中嵌入非ASCII字符。Base64将3个长度不等的字节编码成4个字节的编码,编码后的数据长度会增加1/3左右。

Base64编码需要将原始数据使用64种字符进行重新编码,包括A到Z、a到z、0到9,以及"+/"。原始数据格式如下:

ABCD1234

Base64编码后的格式如下:

QUJDRAoxMjM0

Base64编码实现

下面是JavaScript实现Base64编码的代码:

function base64Encode(str) {
    var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var output = "";
    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
    var i = 0;
    str = utf8Encode(str);
    while (i < str.length) {
        chr1 = str.charCodeAt(i++);
        chr2 = str.charCodeAt(i++);
        chr3 = str.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;
}

function utf8Encode(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;
}

Base64解码实现

下面是JavaScript实现Base64解码的代码:

function base64Decode(str) {
    var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var output = "";
    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
    var i = 0;
    str = str.replace(/[^A-Za-z0-9\+\/\=]/g, "");
    while (i < str.length) {
        enc1 = keyStr.indexOf(str.charAt(i++));
        enc2 = keyStr.indexOf(str.charAt(i++));
        enc3 = keyStr.indexOf(str.charAt(i++));
        enc4 = keyStr.indexOf(str.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 = utf8Decode(output);
    return output;
}

function utf8Decode(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;
}

示例一

以下是将字符串“hello world”进行编码的示例:

var str = "hello world";
var encodedStr = base64Encode(str);
console.log(encodedStr); // 输出 aGVsbG8gd29ybGQ=

示例二

以下是将字符串“aGVsbG8gd29ybGQ=”进行解码的示例:

var str = "aGVsbG8gd29ybGQ=";
var decodedStr = base64Decode(str);
console.log(decodedStr); // 输出 hello world

总结

本文详细讲解了如何使用JavaScript实现Base64编解码,同时给出了两个实例,希望读者可以从中学习到实现的方法和技巧。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS 实现BASE64_ENCODE和BASE64_DECODE(实例代码) - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Javascript基础回顾之(一) 类型

    Javascript基础回顾之(一) 类型 在 Javascript 中,数据类型是对值的分类。值可以是基本类型或对象类型。本文将重点回顾以下六种基本类型: Undefined Null Boolean Number String Symbol Undefined 当声明一个变量但不对它进行初始化时,它的值就为 undefined。例如: let a; co…

    JavaScript 2023年5月18日
    00
  • 详解JavaScript时间格式化

    详解JavaScript时间格式化 什么是时间格式化 在编写前端代码中,经常需要将时间进行格式化展示。时间格式化可以把人类可读的时间转换成计算机可读的时间,或将计算机可读的时间转换成人类可读的时间格式。实现时间格式化可以让用户更易于理解,也方便程序后续处理。 JavaScript的Date对象 JavaScript内置了Date对象来处理日期与时间。Date…

    JavaScript 2023年6月10日
    00
  • js中数组对象去重的两种方法

    讲解“js中数组对象去重的两种方法”的完整攻略。 1.方法1:使用Set JavaScript中的Set是一种可以存储不重复值的集合。因此,可以通过Set来去重。 示例代码 const arr = [{id:1,name:’test’},{id:2,name:’test’},{id:1,name:’test’}] const newArr = Array.f…

    JavaScript 2023年5月27日
    00
  • javascript实现左右缓动动画函数

    Javascript实现左右缓动动画函数的步骤如下: 1. 缓动函数 缓动函数用于生成一个根据时间不断递减的系数,用于产生缓慢的运动效果。常用的缓动函数有以下几种: linear:匀速运动,即保持恒定的速度,不缓动。 easeIn:加速缓动,即运动开始较慢,然后逐渐加速。 easeOut:减速缓动,即运动开始较快,然后逐渐减速。 easeInOut:先加速后…

    JavaScript 2023年6月10日
    00
  • JS日期控件My97DatePicker基本用法

    以下是JS日期控件My97DatePicker基本用法的完整攻略。 一、My97DatePicker是什么 My97DatePicker是一款轻便好用的日期控件,可以自由定制样式,并支持所有主流的浏览器。 二、基本用法 1. 引入My97DatePicker 在文档的标签中插入以下代码,即可引入My97DatePicker: <link rel=&qu…

    JavaScript 2023年5月27日
    00
  • js判断一个对象是数组(函数)的方法实例

    下面是关于“js判断一个对象是数组(函数)的方法实例”的完整攻略。 判断一个对象是数组的方法 在 JavaScript 中判断一个对象是否为数组的方法有很多种,下面介绍两种比较常用的方法。 方法一:使用 Array.isArray() 使用 Array.isArray() 可以判断一个对象是否为数组,同时可以避免使用 typeof 判断的弊端。 示例代码如下…

    JavaScript 2023年5月27日
    00
  • JavaScript异常处理

    JavaScript异常处理可以帮助开发人员减少代码中的错误,提高代码的健壮性和稳定性。在 JavaScript 中,异常是由错误或异常条件引起的程序流控制中的偏差,也就是程序出了问题。 JavaScript异常处理通常使用 try-catch 语句块实现。try 语句块包含可能引发异常的代码,而 catch 语句块用于捕捉异常并处理它们。以下是一个基本的 …

    Web开发基础 2023年3月30日
    00
  • 深入学习jQuery Validate表单验证(二)

    深入学习jQuery Validate表单验证(二) 在上一篇文章中,我们已经了解了如何使用jQuery Validate库进行基本的表单验证。在本篇文章中,我们将进一步学习该库的高级用法。 一、使用自定义规则 除了内置的验证规则之外,我们还可以创建自定义的规则。通过 $.validator.addMethod() 函数,我们可以创建自己的验证规则。 例如,…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部