Base64的js 实现

Base64 就是将字符串变成 以 A~Z a~z 1234567890 +/ 共64个字符 进行编码
1. 将需要编码的字符串变成二进制
  • 1个字符 = 1个字节 = 8位二进制数 而 2的6次方= 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()'));

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值