21xrx.com
2024-11-03 22:07:47 Sunday
登录
文章检索 我的文章 写文章
JavaScript实现Base64编码
2023-06-08 16:00:07 深夜i     --     --
JavaScript

实现原理:

Base64是一种将二进制数据转换成ASCII字符的编码方式,通过将3个8位的字节转换成4个6位的字节,然后再用在ASCII表中的可打印字符来代表这些6位的值。目的是让二进制数据可以通过非二进制的通道(例如HTTP)进行传输。

实现过程:

1. 将字符串转化为二进制数据,使用js中的btoa()方法,将2进制转化为64进制的字符串形式。

2. 将二进制数据转化为字符串,使用atob()方法将64进制的字符串转化为2进制,再用String.fromCharCode()方法转化为字符串。

代码解释:

1. toBase64()方法,接收参数为字符串类型,首先将字符串转化为1个个的二进制数字,每6位合并后,根据ASCII表转化为对应的字符,最终组成64进制的字符串。

2. fromBase64()方法,接收参数为字符串类型,将字符串每1个个的字符按照ASCII表转化成对应的6位二进制数字,最后合并成一个大的2进制数,根据2进制将数字转换为字符,组成字符串。

实现代码:

function toBase64(str) {

let base64 = '',

binaryArr = [];

for (let i = 0; i < str.length; i++) {

let binary = str[i].charCodeAt().toString(2);

while (binary.length < 8) {

binary = '0' + binary;

}

binaryArr.push(binary);

}

while (binaryArr.length % 3 !== 0) {

binaryArr.push('00000000');

}

for (let j = 0; j < binaryArr.length; j += 3) {

let temp = binaryArr[j] + binaryArr[j+1] + binaryArr[j+2];

while (temp.length < 24) {

temp += '0';

}

for (let k = 0; k < 4; k++) {

let index = parseInt(temp.slice(k*6, (k+1)*6), 2);

if (index <= 25) {

base64 += String.fromCharCode(index + 65);

}

else if (index > 25 && index <= 51) {

base64 += String.fromCharCode(index + 71);

}

else if (index > 51 && index <= 61) {

base64 += String.fromCharCode(index - 4);

}

else if (index === 62) {

base64 += '+';

}

else if (index === 63) {

base64 += '/';

}

}

}

return base64;

}

function fromBase64(base64) {

let str = '',

binaryStr = '',

binaryArr = [];

for (let i = 0; i < base64.length; i++) {

let code = base64[i].charCodeAt();

if (code >= 65 && code <= 90) {

binaryStr += (code - 65).toString(2);

}

else if (code >= 97 && code <= 122) {

binaryStr += (code - 71).toString(2);

}

else if (code >= 48 && code <= 57) {

binaryStr += (code + 4).toString(2);

}

else if (code === 43) {

binaryStr += '111110';

}

else if (code === 47) {

binaryStr += '111111';

}

}

while (binaryStr.length % 8 !== 0) {

binaryStr = binaryStr.slice(0, binaryStr.length - 1);

}

for (let j = 0; j < binaryStr.length; j += 8) {

binaryArr.push(binaryStr.slice(j, j +8));

}

for (let k = 0; k < binaryArr.length; k++) {

str += String.fromCharCode(parseInt(binaryArr[k], 2).toString());

}

return str;

}

Base64, 编码

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复