全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

Base63编码详解

发布时间:2023-11-21 03:13:51
发布人:xqq

一、什么是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"

base63

相关文章

解压war包用法介绍

解压war包用法介绍

2023-11-21
了解 LaTeXbf

了解 LaTeXbf

2023-11-21
Java实现日期获取

Java实现日期获取

2023-11-21
C++中的sin函数

C++中的sin函数

2023-11-21

最新文章

武汉新媒体行业公司排名

武汉新媒体行业公司排名

2023-11-01
武汉新媒体就业现状好吗

武汉新媒体就业现状好吗

2023-11-01
武汉全媒体行业发展现状及趋势

武汉全媒体行业发展现状及趋势

2023-10-31
武汉全媒体现状

武汉全媒体现状

2023-10-31
在线咨询 免费试学 教程领取