base64那点事

来源:互联网 发布:木马源码 编辑:程序博客网 时间:2024/06/09 19:06

Base64 包含以下字符:

“a~z”,“A~Z”,“/”,“+”,“=”(=是做补位用的)

 

 

补位规则:

当代码量不是3的整数倍时,代码量/3的余数自然就是2或者1。转换的时候,结果不够6位的用0来补上相应的位置,之后再在6位的前面补两个0。转换完空出的结果就用就用“=”来补位。


按(3*8=4*6)每3个8位字节转化为4个6位的字节(高2位补0)的形式;

编码后的字符每76个占一行,至于换行符,Unix系用的LF('\n'),Windows用的是CRLF('\r''\n');

举例:
字符串“张” (HEX:D5 + HEX:C5 )
1)  11010101   11000101

2) 110101  011100  010100(最后补位两个0)
3) 00110101  00011100  00010100

4)   十六进制: 35  1C     14
5) 十进制:   53  28   20

6)   查base64表:’1’ ’c’   ’U’

7)   加补位1位:’1’   ’c’   ’U’ ‘=’

8)   结果:”1cU=”
同理,若原代码只剩下一个字节,那么将会添加两个“=”。只有这两种情况,所以,Base64的编码最多会在编码结尾有两个“=”

注意:补等号是一定的(1个或者2个),第2)步补零需要注意

 

 解码表如下:

static const unsigned charbase64_dec_map[128] =

{

   127, 127, 127, 127, 127, 127, 127, 127, 127, 127,

   127, 127, 127, 127, 127, 127, 127, 127, 127, 127,

   127, 127, 127, 127, 127, 127, 127, 127, 127, 127,

   127, 127, 127, 127, 127, 127, 127, 127, 127, 127,

   127, 127, 127,  62, 127, 127,127,  63, 52,  53,

    54,  55,  56, 57,  58,  59, 60,  61, 127, 127,

   127,  64, 127, 127, 127,   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, 127, 127, 127, 127, 127, 127, 26,  27,  28,

    29,  30,  31, 32,  33,  34, 35,  36,  37, 38,

    39,  40,  41, 42,  43,  44, 45,  46,  47, 48,

    49,  50,  51, 127, 127, 127, 127, 127

};

 

解码表,其中base64_dec_map数组的索引是base64字符串数组元素的ascii码的10进制值。

例如:base64_dec_map中62的索引为:43,正好ascii码表中十进制43对应的是“+”,所以base64编码表中“+”就是62。

 

解码表没有什么规律,把base64码按照ascii的10进制为索引编码而已。

127可以替换为其他特殊值。

0 0
原创粉丝点击