#link-shortener #encode-decode #decode #encode #shortener #url #data-encoding

bs62

支持前导字节 0x00 的 Base62 编码器/解码器

5个版本

0.1.4 2021年5月17日
0.1.3 2021年3月11日
0.1.2 2021年3月11日
0.1.1 2021年3月11日
0.1.0 2021年3月11日

#2108 in 编码

Download history 43/week @ 2024-03-13 51/week @ 2024-03-20 23/week @ 2024-03-27 26/week @ 2024-04-03 13/week @ 2024-04-10 19/week @ 2024-04-17 29/week @ 2024-04-24 9/week @ 2024-05-01 13/week @ 2024-05-08 20/week @ 2024-05-15 22/week @ 2024-05-22 16/week @ 2024-05-29 18/week @ 2024-06-05 47/week @ 2024-06-12 147/week @ 2024-06-19 43/week @ 2024-06-26

每月下载 257次
basecracker中使用

MIT许可证

21KB
203

bs62

Crates.io License

一个支持前导零字节的 Base62 编码器/解码器。

通常,在将十进制(十进制)转换为 Base62 的过程中,输入数据被解释为一个大数字

[0x00, 0x13, 0x37] => 0x001337 => 4919 (十进制)

由于前导零不计入数字的值(001337 = 1337),在将数字转换为 Base62 时将被忽略。

这是通过在编码前向数据前添加一个 0x01 字节来实现的,从而创建一个以 1 开头的数字:001337 => 1001337(不删除零)

在将数据从 Base62 解码回十进制后,会删除前导的 0x011001337 => 001337

字母表

0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

这是与CyberChef默认使用的相同字母表:[0-9][A-Z][a-z]

维基百科/Base62 建议使用另一种字母表([A-Z][a-z][0-9]),但我在网上发现许多转换器使用的是以下两种之一:[0-9][A-Z][a-z] 或者 [0-9][a-z][A-Z]。由于我喜欢 CyberChef,所以我决定也使用他们的默认字母表。我也认为从数字开始更自然,因为62进制实际上是一种类似于十进制(实际上是基10)或十六进制(基16)的数制。

示例

将数据转换为62进制

此方法将在编码数据之前将其前缀为 0x01

let data = vec![0x13, 0x37];
let encoded = bs62::encode_data(&data);

assert_eq!(encoded, "IKN")

解析62进制为数据

此方法在解码后期望字节数组中有一个前缀 0x01。在返回字节数组之前,它会删除第一个字节。

let encoded = "IKN";
let data = bs62::decode_data(&encoded)?;

assert_eq!(data, vec![0x13_u8, 0x37]);

将数字转换为62进制

let num = 1337;
let encoded = bs62::encode_num(&num);

assert_eq!(encoded, "LZ")

解析62进制为数字

let num = 1337;
let encoded = bs62::encode_num(&num);

assert_eq!(encoded, "LZ")

许可证

bs62 根据 MIT 许可证。

有关更多信息,请参阅此存储库中的 LICENSE.txt 文件。

依赖关系

~495KB
~11K SLoC