base编码

BASE

一.Base64编码

主要内容:将三字节变成四字节 ( 3 * 8=4 * 6)

实现原理:

e.g.

加密前:s 1 3

转成ascii码:115 49 51

二进制码:1110011 110001 110011

在内存中一个字节占8位,不够8位补0

对应二进制码:01110011 00110001 00110011

以六个为一组:011100 / 110011 / 000100 / 110011

8个一组,高位补0

就有:00011100 00110011 00000100 00110011

转成十进制:28 51 4 51

对应常规索引表为:c z E z

但要是遇到转换字节数不是24的倍数怎么办?

在八位转六位时,可能会有余两位或者余四位的情况,此时继续补0凑够八位时,在解码时会出现多余的位。所以为了解决这个问题,base64引入了 ' = ',一个' = '表示六个二进制位。当补两个0时,补一个=凑够8位;补4个0时时,补两个=,凑够16位变成8的倍数。而在解码的时候,并不解析' = '。

之所以凑成8的倍数,是因为base64主要用于加密后的数据传送,而传送中认为最小的传送单位是字节,所以总位数都是8的倍数。

余四位的情况:,补两个0,补一个=

 

 

余两位的情况:补四个0,补两个=

 

 

二.Base32编码

编码方式与base64大同小异,在对二进制位进行分割时,以5个为一组,2^5=32,共有32个可显示字符。

八位转五位时,可能会余{0、1、2、3、4}位,但这时可以补0,不过依旧需要' = '来凑够40的倍数,=表示五个二进制位

 

 

此例在最后余四位时补0,但此时只有25位二进制位,需要三个=(15位),凑成40的倍数,能够以8字节发送,所以结果是"JFGFK==="

三.Base16编码

4个二进制位表示一个字符,正好可以分成两组,不涉及到余数。每组不够8位便补0,字符数量正好是原来的两倍。

加密特征:

1.Base编码后一定会有一个索引表,可以是自定义的索引表,也可以是常规索引表

在IDA里面查看字符串可以很快找到。

例如:是非常规(自定义)索引表

 

 

是常规索引表

 

 

2.

对base64加密时的编程方法

 

 

 

 

 

posted @ 2022-06-23 10:03  e1ectronic  阅读(307)  评论(0编辑  收藏  举报