关于base64编码的原理及实现

来源:互联网 发布:淘宝客服外包服务 编辑:程序博客网 时间:2024/05/18 00:04

转载自:http://www.cnblogs.com/hongru/archive/2012/01/14/2321397.html

-base64的编码都是按字符串长度,以每3个8bit的字符为一组,
-然后针对每组,首先获取每个字符的ASCII编码,
-然后将ASCII编码转换成8bit的二进制,得到一组3*8=24bit的字节
-然后再将这24bit划分为4个6bit的字节,并在每个6bit的字节前面都填两个高位0,得到4个8bit的字节
-然后将这4个8bit的字节转换成10进制,对照Base64编码表 (下表),得到对应编码后的字符。
如果被编码字符长度不是3的倍数的时候,则都用0代替,对应的输出字符为=

Base64 编码表ValueChar
ValueChar
ValueChar
ValueChar0A16Q32g48w1B17R33h49x2C18S34i50y3D19T35j51z4E20U36k5205F21V37l5316G22W38m5427H23X39n5538I24Y40o5649J25Z41p57510K26a42q58611L27b43r59712M28c44s60813N29d45t61914O30e46u62+15P31f47v63/


要求被编码字符是8bit的,所以须在ASCII编码范围内,\u0000-\u00ff,中文就不行。
由于Lucy只有4个字母,所以按3个一组的话,第二组还有两个空位,所以需要用0来补齐。这里就需要注意,因为是需要补齐而出现的0,所以转化成十进制的时候就不能按常规用base64编码表来对应,所以不是a, 可以理解成为一种特殊的“异常”,编码应该对应“=”。
请注意:Base64编码的字符串直接放到URL上是不安全的,因为有+和/号。因此,需要把这俩符号替换掉。例如org.apache.commons.codec.binary.Base64就有encodeBase64URLSafeString方法,这个方法把+和/替换成-和_。

0 0