Base64的js 实现

Base64 就是将字符串变成 以 A~Z a~z 1234567890 +/ 共64个字符 进行编码

1. 将需要编码的字符串变成二进制
  • 1个字符 = 1个字节 = 8位二进制数 而 2的8次方= 64 刚好对应64个字符
2. 按每6位截取上一步中获取的二进制字符串 末尾不足6位的补0
3. 返回对应的base64编码

实现代码


  function getBase64Code(){ // 获取 base64 编码集 A到Z a到z 0到9 再加上 +/
    const AZ = new Array(26).fill(65).map((item, index) => {
      return String.fromCodePoint(item + index);
      // 返回 大写字母 A 到 Z  //65 是 A 的 unicode 编码
      // fromCodePoint()函数 将unicode编码变成 字符
    }).join('');

    const az = new Array(26).fill(97).map((item, index) => {
      return String.fromCodePoint(item + index);
    }).join(''); // 返回 a 到 z
    return AZ + az + '0123456789+/';  // ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/  共64个字符
  }

  function toBase64(str = '') {
    let base64Code = getBase64Code();
    let enCode = '';
    let buWeiDengHao = '';

    // 将每一个字符先变为 UniCode 编码(数字) 再使用 toString 返回其数字的二进制字符串;
    let code =  str.split('').reduce((prev, cur) => {
      let oneWord =  cur.charCodeAt().toString(2);

      oneWord = oneWord.padStart(8, '0');
      // 在base64中 一个字符 = 1个字节 = 8位 所以这里以0 补位 补足8位
      // 2的8次方刚好是64 所以能够和base64编码 一一对应
      return prev + oneWord;
    }, '');
    let item = '';


    for(let i = 0; i < code.length; i += 6){ // 以6位的方式截取这个二进制字符串
      // console.log(i, i + 6);
      item = code.slice(i, i + 6);
      if(item.length < 6){ // 不足6位的需要补位  8 和 6 的最大公约数 是 2 则 只会存在 补 2位 和 补4位的情况
        if(item.length === 2){ //
          item += '0000';
          buWeiDengHao += '=='; // 补4位 要在结尾加2个等号
        }
        if(item.length === 4){
          item += '00';
          buWeiDengHao += '='; // 补2位 要在结尾加1个等号
        }
      }
      enCode += base64Code[parseInt(item, 2)]; // 二进制字符串变成变成10进制 获取数字的索引

      // 不足6位时 需要补位
    }
    return enCode + buWeiDengHao;

  }
  console.log(toBase64('ajksldjslfdg8490568945806()'));

上一篇:1. 20141116


下一篇:ens33网卡失效ipaddr查询不到ip: 出现:ens33: mtu 1500 qdisc noop state DOWN group de