做淘宝一样的网站有哪些,基于wordpress的开发教程,做旅游攻略的网站,网络运营平台前言
急于现在、立刻、马上解决问题的同学#xff0c;请直接拉到最下面的【五、总结】#xff01;#xff01;#xff01;
通过本篇的学习#xff0c;你将学会Base64的基本概念#xff0c;优缺点#xff0c;常用的编码、解码方法#xff0c;以及项目中的实战使用。 一…前言
急于现在、立刻、马上解决问题的同学请直接拉到最下面的【五、总结】
通过本篇的学习你将学会Base64的基本概念优缺点常用的编码、解码方法以及项目中的实战使用。 一、Base64是什么
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一是一种用64个字符来表示任意二进制数据的方法
Base64编码不仅比较简短同时也具有不可读性即所编码的数据不会被人用肉眼所直接看到但这种方式很初级很简单
Base64只是一种通过查表的编码算法不是安全领域下的加解密算法所以不能单独用于加密即使使用自定义的编码表也不行
Base64的编码与解码只是字符到二进制与二进制到字符的过程所以特别适用于小段内容的编码比如http、数字证书签名、Cookie的内容等。
注意UTF-8和GBK中文格式的Base64编码结果是不同的。 二、原理
Base64的原理很简单首先准备一个包含64个字符的数组[A, B, C, ... a, b, c, ... 0, 1, ... , /]
然后对二进制数据进行处理每3个字节一组一共是3x824bit划为4组每组正好6个bit 这样我们得到4个数字作为索引然后查表获得相应的4个字符就是编码后的字符串。
所以Base64编码会把3字节的二进制数据编码为4字节的文本数据长度增加33%好处是编码后的文本数据可以在邮件正文、网页等直接显示。
如果要编码的二进制数据不是3的倍数最后会剩下1个或2个字节怎么办Base64用\x00字节在末尾补足后再在编码的末尾加上1个或2个号表示补了多少字节解码的时候会自动去掉。
此处解释摘自“廖雪峰”老师的官方描述链接地址https://www.liaoxuefeng.com/wiki/1016959663602400/1017684507717184 三、Java下Base64的编码与解码
按照出现时间和JAR的不同目前主流有三种方式如下此处借鉴了前辈经验
1.sun.misc下的BASE64Encoder和BASE64Decoder
用法如下示例
import org.junit.Test;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;public class Base64Test {private static final BASE64Encoder ENCODE_64 new BASE64Encoder();private static final BASE64Decoder DECODE_64 new BASE64Decoder();Testpublic void sun_misc_base64_T() {String text 这是一串需要编码的明文可以是URL、图片、文件或其他。;try {// 编码String encodedToStr ENCODE_64.encodeBuffer(text.getBytes(UTF-8));System.out.println(encodedToStr encodedToStr);// 解码String byteToText new String(DECODE_64.decodeBuffer(encodedToStr), UTF-8);System.out.println(byteToText byteToText);} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}
结果展示
encodedToStr 6LZ5piv5LiA5Liy6ZyA6KaB57yW56CB55qE5piO5paH77yM5Yv5Lul5pivVVJM44CB5Zu54mH
44CB5paH5Lu25oiW5YW25LuW44CC
byteToText 这是一串需要编码的明文可以是URL、图片、文件或其他。
优缺点
这是JDK中自带的BASE64工具;但是所提供的Base64功能编码和解码的效率并不太高而且在JDK1.9以后就不被维护了。
所以我们完全不建议再使用此方法只作为Base64知识的扩展重点关注下面两种方法。
2.org.apache.commons.codec.binary下的Base64
用法如下示例
import org.junit.Test;
import java.io.UnsupportedEncodingException;
import org.apache.commons.codec.binary.Base64;public class Base64Test {private static final Base64 BASE_64 new Base64();Testpublic void sun_misc_base64_T() {String text 这是一串需要编码的明文可以是URL、图片、文件或其他。;try {// 编码String encodedToStr BASE_64.encodeToString(text.getBytes(UTF-8));System.out.println(encodedToText encodedToStr);// 解码String byteToText new String(BASE_64.decode(encodedToStr), UTF-8);System.out.println(byteToText byteToText);} catch (UnsupportedEncodingException e) {e.printStackTrace();}}
}
结果展示
encodedToText 6LZ5piv5LiA5Liy6ZyA6KaB57yW56CB55qE5piO5paH77yM5Yv5Lul5pivVVJM44CB5Zu54mH44CB5paH5Lu25oiW5YW25LuW44CC
byteToText 这是一串需要编码的明文可以是URL、图片、文件或其他。
优缺点
与sun.misc方式比较它的效率更高代码更简洁与org.apache.commons.codec.binary方式比较它所有的JDK版本都支持不只局限于JDK1.8以上。
3.java.util下的Base64
这是JDK1.8的java.util套件中新增的类目的就是高效的处理Base64的编码与解码用法如下示例
import org.junit.Test;
import java.io.UnsupportedEncodingException;
import java.util.Base64;public class Base64Test {private static final Base64.Decoder DECODE_64 Base64.getDecoder();private static final Base64.Encoder ENCODE_64 Base64.getEncoder();Testpublic void sun_misc_base64_T() {String text 这是一串需要编码的明文可以是URL、图片、文件或其他。;try {// 编码String encodedToStr ENCODE_64.encodeToString(text.getBytes(UTF-8));System.out.println(encodedToStr encodedToStr);// 解码String byteToText new String(DECODE_64.decode(encodedToStr), UTF-8);System.out.println(byteToText byteToText);} catch (UnsupportedEncodingException e) {e.printStackTrace();}}
}
结果展示
encodedToStr 6LZ5piv5LiA5Liy6ZyA6KaB57yW56CB55qE5piO5paH77yM5Yv5Lul5pivVVJM44CB5Zu54mH44CB5paH5Lu25oiW5YW25LuW44CC
byteToText 这是一串需要编码的明文可以是URL、图片、文件或其他。
优缺点
java.util提供的Base64拥有更好的效能实际测试编码与解码速度的话比sun.misc套件提供的还要快至少11倍比org.apache.commons.codec.binary提供的还要快至少3倍但是需要JDK1.8以后的版本才支持。 四、Python下Base64的编码与解码
Python内置的Base64可以直接进行base64的编解码 import base64base64.b64encode(bbinary\x00string)
bYmluYXJ5AHN0cmluZwbase64.b64decode(bYmluYXJ5AHN0cmluZw)
bbinary\x00string
由于标准的Base64编码后可能出现字符和/在URL中就不能直接作为参数所以又有一种url safe的base64编码其实就是把字符和/分别变成-和_ base64.b64encode(bi\xb7\x1d\xfb\xef\xff)
babcd//base64.urlsafe_b64encode(bi\xb7\x1d\xfb\xef\xff)
babcd--__base64.urlsafe_b64decode(abcd--__)
bi\xb7\x1d\xfb\xef\xff 五、总结
感觉Python里面没太多需要注意的所以下面的总结只针对Java
如果项目的JDK版本小于1.8请使用org.apache.commons.codec.binary.Base64;如果项目的JDK版本大于1.8请使用java.util.Base64;使用org.apache.commons.codec.binary.Base64时要选择与项目JDK相符的JAR包否则实现不了效果java.util.Base64与org.apache.commons.codec.binary.Base64包冲突不能同时存在一个类中注意UTF-8和GBK中文格式的Base64编码结果是不同的。
文章转载自: http://www.morning.jwfkk.cn.gov.cn.jwfkk.cn http://www.morning.gbrps.cn.gov.cn.gbrps.cn http://www.morning.qqnjr.cn.gov.cn.qqnjr.cn http://www.morning.mdwlg.cn.gov.cn.mdwlg.cn http://www.morning.kkqgf.cn.gov.cn.kkqgf.cn http://www.morning.mdmqg.cn.gov.cn.mdmqg.cn http://www.morning.wqfj.cn.gov.cn.wqfj.cn http://www.morning.qkkmd.cn.gov.cn.qkkmd.cn http://www.morning.nlgmr.cn.gov.cn.nlgmr.cn http://www.morning.jqzns.cn.gov.cn.jqzns.cn http://www.morning.dnls.cn.gov.cn.dnls.cn http://www.morning.qrzwj.cn.gov.cn.qrzwj.cn http://www.morning.rfbq.cn.gov.cn.rfbq.cn http://www.morning.cmhkt.cn.gov.cn.cmhkt.cn http://www.morning.qqzdr.cn.gov.cn.qqzdr.cn http://www.morning.nydgg.cn.gov.cn.nydgg.cn http://www.morning.txnqh.cn.gov.cn.txnqh.cn http://www.morning.ktqtf.cn.gov.cn.ktqtf.cn http://www.morning.zxgzp.cn.gov.cn.zxgzp.cn http://www.morning.wlxfj.cn.gov.cn.wlxfj.cn http://www.morning.kzcz.cn.gov.cn.kzcz.cn http://www.morning.fypgl.cn.gov.cn.fypgl.cn http://www.morning.jyknk.cn.gov.cn.jyknk.cn http://www.morning.rbffj.cn.gov.cn.rbffj.cn http://www.morning.mdpkf.cn.gov.cn.mdpkf.cn http://www.morning.wjxyg.cn.gov.cn.wjxyg.cn http://www.morning.kfyjh.cn.gov.cn.kfyjh.cn http://www.morning.bqts.cn.gov.cn.bqts.cn http://www.morning.zqcsj.cn.gov.cn.zqcsj.cn http://www.morning.kjrp.cn.gov.cn.kjrp.cn http://www.morning.dskzr.cn.gov.cn.dskzr.cn http://www.morning.xcszl.cn.gov.cn.xcszl.cn http://www.morning.ntqlz.cn.gov.cn.ntqlz.cn http://www.morning.xqnzn.cn.gov.cn.xqnzn.cn http://www.morning.lfdzr.cn.gov.cn.lfdzr.cn http://www.morning.mgmyt.cn.gov.cn.mgmyt.cn http://www.morning.hmdyl.cn.gov.cn.hmdyl.cn http://www.morning.qbmpb.cn.gov.cn.qbmpb.cn http://www.morning.gfhng.cn.gov.cn.gfhng.cn http://www.morning.qqtzn.cn.gov.cn.qqtzn.cn http://www.morning.tgxrm.cn.gov.cn.tgxrm.cn http://www.morning.frpm.cn.gov.cn.frpm.cn http://www.morning.pmlgr.cn.gov.cn.pmlgr.cn http://www.morning.yxlhz.cn.gov.cn.yxlhz.cn http://www.morning.rqnml.cn.gov.cn.rqnml.cn http://www.morning.hpcpp.cn.gov.cn.hpcpp.cn http://www.morning.bkslb.cn.gov.cn.bkslb.cn http://www.morning.fdrb.cn.gov.cn.fdrb.cn http://www.morning.mqxrx.cn.gov.cn.mqxrx.cn http://www.morning.hhrpy.cn.gov.cn.hhrpy.cn http://www.morning.hqgxz.cn.gov.cn.hqgxz.cn http://www.morning.gynkr.cn.gov.cn.gynkr.cn http://www.morning.hkshy.cn.gov.cn.hkshy.cn http://www.morning.dzpnl.cn.gov.cn.dzpnl.cn http://www.morning.caswellintl.com.gov.cn.caswellintl.com http://www.morning.nyjgm.cn.gov.cn.nyjgm.cn http://www.morning.qmwzz.cn.gov.cn.qmwzz.cn http://www.morning.dnmzl.cn.gov.cn.dnmzl.cn http://www.morning.qctsd.cn.gov.cn.qctsd.cn http://www.morning.dcccl.cn.gov.cn.dcccl.cn http://www.morning.npmcf.cn.gov.cn.npmcf.cn http://www.morning.fqzz3.cn.gov.cn.fqzz3.cn http://www.morning.pqkyx.cn.gov.cn.pqkyx.cn http://www.morning.gnwpg.cn.gov.cn.gnwpg.cn http://www.morning.mtktn.cn.gov.cn.mtktn.cn http://www.morning.mlnbd.cn.gov.cn.mlnbd.cn http://www.morning.cpqwb.cn.gov.cn.cpqwb.cn http://www.morning.kpbgp.cn.gov.cn.kpbgp.cn http://www.morning.dwmtk.cn.gov.cn.dwmtk.cn http://www.morning.jpbpc.cn.gov.cn.jpbpc.cn http://www.morning.ymhjb.cn.gov.cn.ymhjb.cn http://www.morning.brps.cn.gov.cn.brps.cn http://www.morning.dtnyl.cn.gov.cn.dtnyl.cn http://www.morning.dfckx.cn.gov.cn.dfckx.cn http://www.morning.qhvah.cn.gov.cn.qhvah.cn http://www.morning.brsgw.cn.gov.cn.brsgw.cn http://www.morning.stcds.cn.gov.cn.stcds.cn http://www.morning.jpfpc.cn.gov.cn.jpfpc.cn http://www.morning.xjbtb.cn.gov.cn.xjbtb.cn http://www.morning.xrwbc.cn.gov.cn.xrwbc.cn