Base64 编码与解码
今天做webService,xml数据先通过Base64编码再推送出去,其主要目的不是加密,而是把一些二进制数转成普通字符用于网络传输。由于一些二进制字符在传输协议中属于控制字符,不能直接传送需要转换一下。
Base64编码是通过64个基本ASCII码字符对数据进行重新编码,由于2的6次方等于64,所以每6个位元为一个单元,对应某个可打印字符。三个字节有24个位元,对应于4个Base64单元,即3个字节需要用4个可打印字符来表示。编码后的数据比原始数据略长,为原来的4/3。转换的时候,将三个byte的数据,先后放入一个24bit的缓冲区中,先来的byte占高位。数据不足3byte的话,于缓冲区中剩下的bit用0补足。然后,每次取出6(因为)个bit,按照其值选择
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
中的字符作为编码后的输出。不断进行,直到全部输入数据转换完成。如果最后剩下两个输入数据,在编码结果后加1个“=”;如果最后剩下一个输入数据,编码结果后加2个“=”;如果没有剩下任何数据,就什么都不要加,这样才可以保证资料还原的正确性。
java Base64编码:
BASE64Encoder encoder=new BASE64Encode(); encoder.encode(pxml)
java Base64解码:
BASE64Decoder decoder = new BASE64Decoder(); byte[] rxmlByte=decoder.decodeBuffer(rxml); rxml=new String(rxmlByte,"utf-8");//那个xmk可能有中文,所以制定编码方式 return rxml;