Base16
1.1、Base16编码产生的原因

有时候,我们需要把字节流打印出来,而且要求打印出来的字符容易记忆,容易还原到字节数据去。 比如,常用的那些哈希算法得到的是固定长度的字节数组, 那么如何让这个结果可打印呢?Base16编码方案就是为了解决这个问题的。

Base16这个名字可能用的比较少,实际上,我们通常使用hex这个名字。

1.2、Base16编码规范

Base64编码的最新规范是:RFC4648

1.3、Base16编码针对的数据

Base16编码可以将任何二进制的数据编码到可打印的16个字符之中。

1.4、Base16编码后的字符

Base16编码后的字符串中可能出现的字符:

  • 'A' ~ 'F',或者是'a' ~ 'f',6个
  • '0' ~ '9',10个

Base16编码后的字符串中最多可以出现16 = 6 + 10种字符。

Base16编码是大小写不敏感的,所以,'A'~'F''a'~'f'都可以使用。

1.5、Base16编码的原理

4bit可以表示2^4 = 16个数字,所以, 用4bit可以表示完所有的十六进制数

由于1byte=8bit,所以,1byte可以表示2十六进制数

这里就涉及到了字节序的问题,拆分后,到底采用小端模式还是大端模式呢?Base16编码规范明确规定使用大端模式

假设:有一个字节的二进制表示为10100101,那么,我们先把这一个字节分成2组, 从左到右依次为10100101,这2组二进制数字分别转换成十进制数依次为105,分别把105作为数组的下标,从下面的表格中查询得对应序号的十六进制数,分别为A5,所以,最终,这一个字节的Base16编码就是A5, 当然,您也可以使用小写字母,这也是允许的。

1.6、Base16在各种语言中的实现
1.7、Base16编码的变种

Base16编码的算法把一个byte拆分成两个字节,这就出现了字节序问题,Base16编码的算法选择使用大端模式,实际上,我们还可以选择使用小端模式

Base16编码索引与对应字符的表格,其实也可以改变的,您也可以替换为其他的16个字符,只要您愿意。

经过您自己修改后的变种Base16编码能达到一定的加密效果,因为只有您自己知道那个索引表。所以您在使用的时候, 任何使用者都需要使用您修改后的这个算法,而不能使用标准的Base16编码算法。

1.8、Base16编码在线验证工具

https://www.qqxiuzi.cn/bianma/base.php?type=16