Medusar's Blog
敬畏知识,谦逊前行
Toggle navigation
Medusar's Blog
主页
Booklist
Resources
About Me
归档
标签
Base64原理
算法
基础
加密
2016-03-02 20:35:30
877
0
0
medusar
算法
基础
加密
## Base64 是什么? Base64是一种数据表示方法,它使用64个可打印字符来表示二进制数据,所以才叫做Base64。 ## Base64 能做什么? Base64一般用于处理文本数据,表示、传输、存储。比如MIME中的email,以及在xml中存储复杂数据。 **编码** 将普通数据转换成符合Base64标准的数据的过程。 **解码** 将Base64标准的数据转换成普通数据的过程。 ## Base64 的原理? ### 64个可打印字符 52个字母:大写字母+小写字母 10个数字:0~9 两个特殊字符:+ 和 / 以上就够64个了,但是有时候还会用一个“=”,等号的作用是填充,后面会讲到。 Base64字符对照表: |数值|字符|数值 |字符|数值 |字符 |数值|字符| |---|---|---|---|---|---|---|---| |0 |A |16 |Q |32 |g |48 |w | |1 |B |17 |R |33 |h |49 |x | |2 |C |18 |S |34 |i |50 |y | |3 |D |19 |T |35 |j |51 |z | |4 |E |20 |U |36 |k |52 |0 | |5 |F |21 |V |37 |l |53 |1 | |6 |G |22 |W |38 |m |54 |2 | |7 |H |23 |X |39 |n |55 |3 | |8 |I |24 |Y |40 |o |56 |4 | |9 |J |25 |Z |41 |p |57 |5 | |10 |K |26 |a |42 |q |58 |6 | |11 |L |27 |b |43 |r |59 |7 | |12 |M |28 |c |44 |s |60 |8 | |13 |N |29 |d |45 |t |61 |9 | |14 |O |30 |e |46 |u |62 |+ | |15 |P |31 |f |47 |v |63 |/ | ### 编码原理 2的6次方等于64,所以,如果用Base64来表示二进制数据的话,那么每6位就可以用一个Base64字符表示。 在计算机中,一个字节占8位,每个英文字符占1个字节。所以,假如有三个英文字符,那么一共3*8=24位,每6位可以用一个Base64表示,所以,转换后的长度为4个字符。 编码过程: 1. base64的编码都是按字符串长度,以每3个8bit的字符为一组 2. 针对每组,首先获取每个字符的ASCII编码 3. 将ASCII编码转换成8bit的二进制,得到一组3*8=24bit的字节 4. 将这24bit划分为4个6bit的字节,并在每个6bit的字节前面都填两个高位0,得到4个8bit的字节 5. 4个8bit的字节转换成10进制,对照Base64编码表,得到编码后的字符。 假设有一个字符串"Man",要用Base64编码,过程如下: 1. 首先找到每个字符对应的ASCII值,然后将该值转为二进制表示。 2. 三个字符的二进制表示按顺序组合在一起。 3. 重新分组,每6个二进制作为一组,并将分组之后的二进制转为10进制表示。 4. 查表找到10进制数据对应的字符,将新字符拼起来即可。 如下图:  上面我们用了三个字符,3*8=24,正好是6的整数倍,但是如果我们只有两个字符呢,此时2*8=16,不是6的整数倍,怎么办呢? 解决办法很简单:补位。如果8位字符数不够3的整数倍,那么就在最后补0,以达到6的整数倍,在编码后的base64文本后加上一个或两个'='号,代表补足的字节数。 这里要好好解释一下,有两个概念 **补位**:原始数据的二进制表示,如果位数不是6的整数倍,则需要补够为6的整数位,然后按照上面的规则进行转换。 **=填充**:原始数据按照字节计算,如果不够三个字节的整数倍,则需要用“=”补齐,比如最后缺一个字节,那么就在最后加一个“=”,缺两个字节,就加两个。 比如下面的例子:  当只有’A‘一个字符的时候,首先,二进制只有8位,不够6的整数倍,所以需要补4个零,凑够12位。而这12位对应的Base64编码是QQ。由于A只占一个字节,所以距离三个字节还差2个,所以最后需要补上两个等号。所以A的Base64编码结果就是: QQ==
上一篇:
Java日志框架(Commons-logging,SLF4j,Log4j,Logback)
下一篇:
Java多线程模式之流水线模式
0
赞
877 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
Please enable JavaScript to view the
comments powered by Disqus.
comments powered by
Disqus
文档导航