您的位置:首页 > 其它

标准base64编码解码探究

2015-04-26 21:49 218 查看
 前两天写接口,遇到安卓终端编码使用GBK,而WEB服务端的中文编码使用的是UTF-8的情况,所以使用POST请求发送的中文内容进过MD5加密后会出现这样一种情况:原文内容显示为乱码,加密文则是正常GBK汉字的加密文,导致原文和加密文校验无法通过的情况。遇到这种中文传输成乱码的问题是很让人头疼的,所以在同事的提醒下,采用了将GBK中文转码成UTF-8码中文后用base64加密再进行MD5加密的方法,使用起来感觉还不错,并且请求的保密性也更高了,所以利用双休日仔细研究了一下base64这种实用而常见的编码模式。
        标准的base64转码对于英文和数字符号等字符的编码过程如下:1.查找该字符的ASCII码值。2.把该ASCII码值转换成8bit的二进制码。3.把这些8bit二进制码按三个一组排列,组成24bit一组的形式,如果末尾不足24bit的部分全部用0代替。4.再将24bit按照6bit一组重新分成6bit一组的形式。5.由于计算机无法识别六位,所以在每组前面补码00,凑齐8bit。6.将补码后的数字转换成十进制。7.查询标准base64编码表,得出加密编码后的字符串,(当初为了补满24bit在末尾加的0,每8bit转换成一个=,注意不是A)。

       下面我以英文名King为例:

 

King

ASCii码 75 105 110 103

二进制  01001011 01101001 01101110  01100111 00000000 00000000

64      010010 110110 100101 101110 011001 110000 000000 000000

补位    00010010 00110110 00100101 00101110 00011001 00110000 00000000 00000000

十进制  18 54 37 46 25 48 = =

转base64码 S2luZw==

        再说说中文的编码方式:中文的编码方式和英文的大致相同,区别在于英文字符有ASCII码表可以查询,但中文不是,中文字由于需要使用UTF-8的编码模式,所以需要查询UTF-8码(如果是Unicode或者GB编码格式的可以查询其相对应的编码表),64编码则以该表的值为基础进行转换。
    

    下面我以我的中文名王冲为例:

王 冲

UTF-8码  E78E89  E586B2

二进制 111001111000111010001011   111001011000011010110010

64     111001 111000 111010 001011 111001 011000 011010 110010

补位  00111001 00111000 00111010 00001011 00111001 00011000 00011010 00110010

十进制 57 56 58 11 57 24 26 50

转base64码 546L5Yay

        需要注意,有些特殊用途的base64编码会不采用标准base64编码形式,而解码则是编码的逆运算。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息