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可以替换为其他特殊值。
- base64那点事
- 面试那点事
- 公司那点事
- 编程那点事!!
- 公务员那点事
- 毕业那点事
- JVM 那点事
- C++那点事
- 【粗心】那点事
- 【春运】那点事
- 内存那点事
- 程序员那点事
- Ext那点事
- Ext那点事
- 学习那点事
- 数组那点事
- 上班那点事
- 估算那点事
- poj解题报告——1426
- Java多线程-工具篇-BlockingQueue
- JS日期(Date)处理函数总结
- POJ 题目2406 Power Strings(KMP)
- 计算机网络笔记《一》
- base64那点事
- Process 的 waitFor() 造成的阻塞
- 对编写爬虫的巩固
- 计算机网络《二》
- error while loading shared libraries: libstdc++.so.6: cannot open shared obj
- 定位
- GIBBS SAMPLING FOR THE UNINITIATED 的学习笔记
- HDU 5139 Formula 离线处理
- 计算机网络三之以太网