Saber2pr's Blog

base64算法

base64 是一种用 64 个字符(1 字节 = 8bit)来表示任意 8bit 位的二进制数据的方法。 base64 一共只有 2 的 6 次方 64 个字符(6bit),而实际上 1 bytes = 8bit 将二进制数据每 6bit 位替换成一个 base64 字符

function base64encode(text) {
  let code = ""
  let base64Code =
    "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
  let res = ""

  for (let i of text) {
    let char = i.charCodeAt().toString(2)
    // 将 toString 前面省略的0补上,补够8位二进制
    for (let a = 0; a <= 8 - char.length; a++) {
      char = 0 + char
    }
    code += char
  }
  // 不足 24 bit (也就是 3 bytes) 的情况进行特殊处理
  // 只有 1 字节的时候
  if (code.length % 24 === 8) {
    // 补齐到 2*6 = 12 bit
    code += "0000"
    // 剩余缺失的 2 个 base64 字符用等号代替
    res += "=="
  }
  // 只有 2 字节的时候
  if (code.length % 24 === 16) {
    // 补齐到 3 * 6 = 18 bit
    code += "00"
    // 剩余缺失的 1 个 base64 字符用等号代替
    res += "="
  }

  let encode = ""
  for (let i = 0; i < code.length; i += 6) {
    let item = code.slice(i, i + 6)
    encode += base64Code[parseInt(item, 2)]
  }

  return encode + res
}

console.log(base64encode("this is a example")) // dGhpcyBpcyBhIGV4YW1wbGU=