Expand description
A Base62 encoder / decoder with support for leading zero bytes.
Normally, during the conversion of base10 (decimal) to base62, the input data is interpreted as one large number:
[0x00, 0x13, 0x37] => 0x001337 => 4919 (decimal)
As leading zeroes do not count to the value of a number (001337 = 1337
),
they are ignored while converting the number to base62.
- This is exactly what the
encode_num
function does. - The
encode_data
keeps these leading zeroes.
This is achieved by prepending a 0x01
byte to the data before encoding,
thus creating a number that starts with a 1
: 001337 => 1001337
(No zeroes
are removed)
The leading 0x01
is removed after the data has been decoded from bse62 back
to base10: 1001337 => 001337
§Alphabet
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
This is the same alphabet that
CyberChef
uses by default: [0-9][A-Z][a-z]
.
Wikipedia/Base62 suggests another
alphabet ([A-Z][a-z][0-9]
) but I found that many online converters use
either [0-9][A-Z][a-z]
or [0-9][a-z][A-Z]
. And as I love
CyberChef, I decided to use their
default alphabet aswell. I also think that starting with numbers is more
natural as base62 is actually a number system like decimal (which is actually
base10) or hexa-decimal (base16).
§Examples
§Convert Data to Base62
This method will prepend 0x01
to the data before encoding it.
let data = vec![0x13, 0x37];
let encoded = bs62::encode_data(&data);
assert_eq!(encoded, "IKN")
§Parse Base62 to Data
This method expects a leading 0x01
in the byte array after decoding. It
removes the first byte before returning the byte array.
let encoded = "IKN";
let data = bs62::decode_data(&encoded)?;
assert_eq!(data, vec![0x13_u8, 0x37]);
§Convert a Number to Base62
let num = 1337;
let encoded = bs62::encode_num(&num);
assert_eq!(encoded, "LZ")
§Parse Base62 to Number
let num = 1337;
let encoded = bs62::encode_num(&num);
assert_eq!(encoded, "LZ")
Re-exports§
pub extern crate num_bigint;
pub extern crate num_traits;
Functions§
- decode_
data - Decode data with support for leading zeroes (that has been encoded using
encode_data
). - decode_
data_ forgiving - Decode data just like
decode_data
but allow data that was not prepended with a0x01
byte. - decode_
num - Decode a base62 string to a base10 (decimal) number.
- encode_
data - Encode data with support for leading zeroes by prepending a
0x01
byte to the data. - encode_
num - Convert a base10 (decimal) number to base62.