base64

Posted on 2021-09-06  14 Views


一. base64编码由来

  在数据传输过程中,因为有些字符可能属于不可见字符或者属于传输渠道不支持的字符,为保障所有字节多可以有效传输,便诞生了一种可以将不可打印的字符转化为可打印字符的编码格式,这就是base64编码

二、base64实现原理

它是用64个可打印字符表示二进制所有数据方法。由于2的6次方等于64,所以可以用每6个位元为一个单元,对应某个可打印字符。我们知道三个字节有24个位元,就可以刚好对应于4个Base64单元,即3个字节需要用4个Base64的可打印字符来表示。在Base64中的可打印字符包括字母A-Z、a-z、数字0-9 ,这样共有62个字符,此外两个可打印符号在不同的系统中一般有所不同。

base64标准编码表

因为在编码过程中用0将6字节补齐为8字节,所以编码结束后,占用的空间会扩大为原来的4/3,在进行逆向分析时可以将此作为特征辨别是否使用了base64加密。此外由于base64是将三字节转化为四字节,若是原数据不足三字节的话则使用“=”号补齐,所以在base64编码后的序列结尾经常能看到一个或两个“=”。

三、更换码表

在某些时候,会更换base64的码表以达到加密的目的,在做reserve的时候会碰到,实现起来并不困难,将python脚本复制如下


str1 = "待解密字符串"

#更换的码表
string1 = "AdefghijkBCDEFGOPQRST345UVWXYZabclmHIJKLMNnopqrstuvwxyz0126789+/"
#标准码表
string2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

print (base64.b64decode(str1.translate(str.maketrans(string1,string2))))