千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > Base63编码详解

Base63编码详解

来源:千锋教育
发布人:xqq
时间: 2023-11-21 03:13:51 1700507631

一、什么是Base63?

Base63是一种基于63个字符集的编码方式,它可以将二进制数据转换为文本字符串。与Base64不同的是,Base63所使用的字符集包括大小写字母及数字,没有使用符号等特殊字符。

Base63的基本原理就是将二进制数据每6位一分组,然后转换成一个字符,最终生成经过编码的字符串。

二、Base63的字符集

Base63的字符集包含了A~Z、a~z以及0~9这63个字符。这些字符被用来作为Base63编码的映射表。

0: 0
1: 1
2: 2
3: 3
4: 4
5: 5
6: 6
7: 7
8: 8
9: 9
10: A
11: B
12: C
...
35: Z
36: a
37: b
...
61: z
62: -

三、Base63的编码方式

将二进制数据按每6位一组进行分组,然后将每个6位二进制数转换成一个字符,最终将这些字符连接起来形成一个编码字符串。

例如,如果我们要将二进制数据0110100101110010编码成Base63字符串,按每6位进行分组后为011010和010111和0010。分别转换后得到了"MaC"、"X"和"K"三个字符,将它们连接起来即可得到最终的Base63编码字符串为"MaCXK"。

// JavaScript示例代码
function encodeBase63(data) {
  const base63Chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-";
  let result = "";
  let bit = 0;
  let bits = 0;
  for (let i = 0; i < data.length; i++) {
    bit |= data[i] << (16 - bits - 8);
    bits += 8;
    while (bits >= 6) {
      result += base63Chars[(bit >> 10) & 0x3F];
      bit <<= 6;
      bits -= 6;
    }
  }
  if (bits > 0) {
    result += base63Chars[(bit >> 10) & 0x3F];
  }
  return result;
}

let data = new Uint8Array([0x6a, 0x90, 0xe0, 0x1a]);
let result = encodeBase63(data);
console.log(result); // Output: "0OZVav"

四、Base63的解码方式

将Base63字符串按每个字符进行分割,然后将每个字符在Base63字符集中的位置转换成6位二进制数,最终将这些二进制数连接起来形成二进制数据。

例如,如果我们有一个Base63字符串"MaCXK",我们需要将M的位置转换成12、a的位置转换成36,C的位置转换成14,X的位置转换成37,K的位置转换成38。将它们连接起来得到的二进制数为01101001011100100010,即011010和010111和0010。将它们连接起来形成的二进制数为0110100101110010,即原始数据。

// JavaScript示例代码
function decodeBase63(data) {
  const base63Chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-";
  let result = new Uint8Array(Math.ceil(data.length * 6 / 8));
  let bit = 0;
  let bits = 0;
  let offset = 0;
  for (let i = 0; i < data.length; i++) {
    bit |= base63Chars.indexOf(data[i]) << (26 - bits - 6);
    bits += 6;
    while (bits >= 8) {
      result[offset++] = (bit >> 16) & 0xFF;
      bit <<= 8;
      bits -= 8;
    }
  }
  return result;
}

let data = "MaCXK";
let result = decodeBase63(data);
console.log(result); // Output: Uint8Array(4) [106, 144, 224, 26]

五、Base63的应用

Base63最广泛的应用是在URL短链接的生成中。由于Base63相比于Base64更加紧凑,因此使用Base63可以使得短链接更加简洁明了。在一些特殊的场景中,如使用QR码的场景中,也会使用Base63编码的数据。

// JavaScript示例代码
function generateShortUrl(url) {
  let data = new TextEncoder().encode(url);
  let hash = crypto.subtle.digest("SHA-256", data);
  let shortUrl = encodeBase63(new Uint8Array(hash));
  return "http://short.com/" + shortUrl;
}

let url = "https://example.com/this/is/a/long/url";
let shortUrl = generateShortUrl(url);
console.log(shortUrl); // Output: "http://short.com/02INk2r6kI1G2Z6WggJHIg"

tags: base63
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT