一、base64

1原理

base64是一种二进制到文本的编码系统,它使用一组 64 个不同的 ASCII 字符将二进制数据传输为基于文本的格式,6bit为一组。它通常用于对二进制数据进行编码,例如图像或音频文件。

2.字符表

CharacterBinaryDecimal
A0000000
B0000011
C0000102
D0000113
E0001004
F0001015
G0001106
H0001117
I0010008
J0010019
K00101010
L00101111
M00110012
N00110113
O00111014
P00111115
Q01000016
R01000117
S01001018
T01001119
U01010020
V01010121
W01011022
X01011123
Y01100024
Z01100125
a01101026
b01101127
c01110028
d01110129
e01111030
f01111131
g10000032
h10000133
i10001034
j10001135
k10010036
l10010137
m10011038
n10011139
o10100040
p10100141
q10101042
r10101143
s10110044
t10110145
u10111046
v10111147
w11000048
x11000149
y11001050
z11001151
011010052
111010153
211011054
311011155
411100056
511100157
611101058
711101159
811110060
911110161
+11111062
/11111163

3.编码过程

了解完上述的知识,我们以编码 Man 字符串为例,来直观的感受一下编码过程。Man 由 M、a 和 n 3 个字符组成,它们对应的 ASCII 码为 77、97 和 110。

接着我们以每 6 个比特为一个单元,进行 base64 编码操作,具体如下图所示:

由图可知,Man (3字节)编码的结果为 TWFu(4字节),很明显经过 base64 编码后体积会增加 1/3。Man 这个字符串的长度刚好是 3,我们可以用 4 个 base64 单元来表示。但如果待编码的字符串长度不是 3 的整数倍时,先使用 0 字节值在末尾补足,使其能够被 3 整除,然后再进行 base64 的编码。

4.变种

1)一种用于URL的改进Base64编码,它不在末尾填充=号,并将标准Base64中的+和/分别改成了-和_,这样就免去了在URL编解码和数据库存储时所要做的转换,避免了编码信息长度在此过程中的增加,并统一了数据库、表单等处对象标识符的格式。

2)另有一种用于正则表达式的改进Base64变种,它将+和/改成了!和-,因为+,*以及前面在IRCu中用到的[和]在正则表达式中都可能具有特殊含义。

3)此外还有一些变种,它们将+/改为_-或._(用作编程语言中的标识符名称)或.-(用于XML中的Nmtoken)甚至_:(用于XML中的Name)。

5.使用python加密文本

import base64
print('进行base64编码')
bs64 = str(input('请输入需要加密的文本\n>>>'))
bs64_e = base64.b64encode(bs64.encode('utf-8'))
print('结果如下:')
print(bs64_e)

6.使用python解密

import base64
bs64 = input('请输入需要解密的文本\n>>>')
bs64_d = str(base64.b64decode(bs64),'utf-8')
print('结果如下')
print(bs64_d)

7.base64编码特征:

1. 字符集:Base64编码使用了64个字符来表示二进制数据,包括A-Z(26个大写字母)、a-z(26个小写字母)、0-9(10个数字),以及两个额外的字符+和/。有时候也会使用=字符作为填充。

2. 编码方式:Base64将每3个字节(24位)的数据编码为4个ASCII字符。如果数据不足3个字节,会进行填充。

3. 可打印性:Base64编码后的数据只包含可打印的ASCII字符,因此可以在文本协议中安全地传输和存储。

4. 字符长度:Base64编码后的字符串长度通常会比原始数据稍长,因为每3个字节的数据会被编码为4个字符。填充字符=的出现取决于数据长度是否能被3整除。

5. 逆向转换:Base64编码是可逆的,可以将编码后的数据解码回原始的二进制数据。

6. 应用场景:Base64常用于将二进制数据转换为文本格式,例如在电子邮件中传输二进制附件、在URL中传递二进制数据、或将二进制数据存储在文本文件中。

需要注意的是,Base64编码并不是一种加密算法,它只是一种将二进制数据转换为文本数据的编码方式。编码后的数据仍然可以被解码回原始的二进制形式。

二、base32

1.定义及区别

Base32 是 Base64 的变种,与 Base64 不同的地方在于 Base64 以 6 bit 为一组作为索引,而 Base32 以 5 bit 为一组作为索引,每一组用一个 ASCII 字符表示。Base 64 总共需要 64 个字符表示,而 Base32 则只需要 32 个字符表示。

2.Base32 的编码流程如下:

对二进制数据进行预处理:如果二进制数据的 bit 数目不是 5 的倍数的话,在末尾补 0 直至为 5 的倍数。
以 5 bit 为一组进行分组。
将每一组的 5 bit 二进制转换为索引(0 - 31)。
在索引 - 字符转换表中查询索引对应的字符。
根据原始二进制数据的 bit 数目除以 40 后的余数,确定末尾需要补 + 的数目。
如果原始二进制数据 bit 数目除以 40 后的余数是 0 的话,不需要补 +。
如果余数是 8,补 6 个 +。
如果余数是 16,补 4 个 +。
如果余数是 24,补 3 个 +。
如果余数是 32,补 1 个 +。

3.Base32 的索引 - 字符转换表如下:

索引:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

字符:9 8 7 6 5 4 3 2 1 0 m n b v c x z a s d f g h j k l p o i u y t

4.python加密

import base64
str = input()
res = base64.b32encode(str.encode('utf-8')).decode('utf-8')
print(res)

python解密

import base64
a=input()
res = base64.b32decode(a.encode('utf-8')).decode('utf-8')
print(res)

三、base58

1.定义及区别:

base58是比特币的一种特殊编码方式,主要用于产生比特币钱包地址。相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"l",以及"+"和"/"符号。

2.编码表

3.python加解密

#加密
def b58encode(tmp: str) -> str:
    tmp = list(map(ord, tmp))
    temp = tmp[0]
    base58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
    for i in range(len(tmp) - 1):
        temp = temp * 256 + tmp[i + 1]
    tmp = []
    while True:
        tmp.insert(0, temp % 58)
        temp = temp // 58
        if temp == 0:
            break
    temp = ""
    for i in tmp:
        temp += base58[i]
    return temp
#解密
def b58decode(tmp: str) -> str:
    import binascii
    base58 = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"
    temp = []
    for i in tmp:
        temp.append(base58.index(i))
    tmp = temp[0]
    for i in range(len(temp) - 1):
        tmp = tmp * 58 + temp[i + 1]
    return binascii.unhexlify(hex(tmp)[2:].encode("utf-8")).decode("UTF-8")
#输出加密内容
print(b58encode("HELLO"))
#输出解密内容
print(b58decode("99v1Y8E"))

四、base16

1.定义

Base16编码使用16个ASCII字符对任何数据进行编码,Base16与Base64的实现原理类似,同样是将原数据二进制形式取指定位数转换为ASCII码。首先获取数据的二进制形式,将其串联起来,每4个比特为一组进行切分,每一组内的4个比特可转换到指定的16个ASCII字符中的一个,将转换后的ASCII字符连接起来,就是编码后的数据。

2.python

#python加密
import base64
str = input()
res = base64.b16encode(str.encode('utf-8')).decode('utf-8')
print(res)
#python解密
import base64
a=input()
res = base64.b16decode(a.encode('utf-8')).decode('utf-8')
print(res)

五、base91

1.顾名思义,base91需要91个字符来表示用ASCII编码的二进制数据。在94个可打印的ASCII字符(0x21-0x7e)中,以下三个字符被省略以构建base91字母表:
-(破折号,0x2d)
\(反斜杠,0x5C)
'(撇号,0x27)

六、base100

是emoji表情

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐