base16编码的前世今生

262 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情

Base16简介

Base16编码就是将ASCII字符集中可打印的字符(数字0-9和字母A-F)对应的二进制字节数据进行编码。

Base16原理

1.将数据(根据ASCII编码,UTF-8编码等)转成对应的二进制数,不足8比特位高位补0.然后将所有的二进制全部串起来,4个二进制位为一组,转化成对应十进制数.

2.根据十进制数值找到Base16编码表里面对应的字符.Base16是4个比特位表示一个字符,所以原始是1个字节(8个比特位)刚好可以分成两组,也就是说原先如果使用ASCII编码后的一个字符,现在转化成两个字符.数据量是原先的2倍.

编码表

屏幕截图 2022-10-04 204203.png

加密代码

import base64
original = 'hello world'
print("1  original:  ",type(original),original)
print("2  original.encode('utf-8'):  ",type(original.encode('utf-8')),original.encode('utf-8'))
str_encode = base64.b16encode(original.encode('utf-8'))
print("3  str_encode:  ",type(str_encode),str_encode)
print("4  str(str_encode,'utf-8'):  ",type(str(str_encode,'utf-8')),str(str_encode,'utf-8'))
str_decode = base64.b16decode(str_encode)
print("5  str_decode:  ",type(str_decode),str_decode)
print(str(str_decode,'utf-8'))

base16、base32、base64区别

16,32和64它们编码原理都是一样的,不同的地方在于下面 2 东西:

  • 一个字符所对应表格中的下标的 bit 位是多少个
  • 对应的编码表格是多少

1.首我们知道数据类型 char 一般占2个字节,当然还有二般的情况,比如1个字节,但这里我们以2字节为例,例如: char r = 'a',当我们其它的字节个数表示一个字符的时候,就会产生其它效果。而,上述的第一点就是类似这个意思。当代表下标的 bit 位的个数变了,下标的取值范围也跟着变,比如 2 个 bit 位最大的数是 11 = 3,而 3 个 bit 位最大的数是 111 = 7 2.对于第二点来说,就是一个用来供查表的表格,例如9x9乘法表。