当前位置: 首页 > news >正文

网站建设项目背景程序员公司

网站建设项目背景,程序员公司,加强心理咨询网站的建设,成立公司怎么取名前言 急于现在、立刻、马上解决问题的同学,请直接拉到最下面的【五、总结】!!! 通过本篇的学习,你将学会Base64的基本概念,优缺点,常用的编码、解码方法,以及项目中的实战使用。 一…

前言

急于现在、立刻、马上解决问题的同学,请直接拉到最下面的【五、总结】!!!

通过本篇的学习,你将学会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个字节一组,一共是3x8=24bit,划为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 = 6L+Z5piv5LiA5Liy6ZyA6KaB57yW56CB55qE5piO5paH77yM5Y+v5Lul5pivVVJM44CB5Zu+54mH
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 = 6L+Z5piv5LiA5Liy6ZyA6KaB57yW56CB55qE5piO5paH77yM5Y+v5Lul5pivVVJM44CB5Zu+54mH44CB5paH5Lu25oiW5YW25LuW44CC
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 = 6L+Z5piv5LiA5Liy6ZyA6KaB57yW56CB55qE5piO5paH77yM5Y+v5Lul5pivVVJM44CB5Zu+54mH44CB5paH5Lu25oiW5YW25LuW44CC
byteToText = 这是一串需要编码的明文,可以是URL、图片、文件或其他。

优缺点:

  • java.util提供的Base64拥有更好的效能,实际测试编码与解码速度的话,比sun.misc套件提供的还要快至少11倍,比org.apache.commons.codec.binary提供的还要快至少3倍;
  • 但是,需要JDK1.8以后的版本才支持。

四、Python下Base64的编码与解码

Python内置的Base64可以直接进行base64的编解码:

>>> import base64
>>> base64.b64encode(b'binary\x00string')
b'YmluYXJ5AHN0cmluZw=='
>>> base64.b64decode(b'YmluYXJ5AHN0cmluZw==')
b'binary\x00string'

由于标准的Base64编码后可能出现字符+/,在URL中就不能直接作为参数,所以又有一种"url safe"的base64编码,其实就是把字符+/分别变成-_

>>> base64.b64encode(b'i\xb7\x1d\xfb\xef\xff')
b'abcd++//'
>>> base64.urlsafe_b64encode(b'i\xb7\x1d\xfb\xef\xff')
b'abcd--__'
>>> base64.urlsafe_b64decode('abcd--__')
b'i\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.sczhlp.com/news/92759/

相关文章:

  • wordpress企业网站建设网站设计与制作说明
  • 汕头站扩建后比哪个站大通过网站建设提高企业的
  • 网站设计好了如何上传到自己搭建的网上去福州门户网站
  • 企业网站建设 百度文库网站建设公司下载
  • 酒类产品网站设计网站各种按钮代码
  • 检察院网站建设标书自己做网站传视屏
  • 南宁做网站科技公司网站建设的阶段
  • 建个网站需要投资多少钱appstore关键词优化
  • 深圳 网站开发公司电话网站建设后期维护
  • 域名备案网站名称如何写市场调研报告
  • 糖果网站建设策划书wordpress主题 v2ex
  • 互联网门户网站有哪些涟水建设局网站
  • 工程建设监理学校网站永倍达电商平台
  • dede做漫画网站的案例宁波网站建设信息
  • 科技 响应式网站模板下载能源建设网站
  • 莱西网站建设单位做网站注意什么问题
  • 网站做担保交易 是否资质网页字体导入wordpress
  • 镇江网站建设多少钱抚州做网站的公司
  • 2016年做网站好不好电子商务师证怎么考
  • 专门做音乐的网站百度站长平台登录
  • 建立网站准备工作二次开发接口
  • 无锡企业网站制作南海网站建设公司
  • 如何做网站?青岛网站排名推广
  • 安徽省建设厅证书查询官方网站上海做外贸网站
  • 技术支持广州骏域网站建设专家个人网站建设的计划书
  • 号号网站开发企业网络推广的简介
  • 公司集团网站建设大专电子商务主要学什么
  • 网站怎么做跳转页面如何app开发制作
  • 专业网站设计方案公司系统页面模板
  • wordpress 推荐环境株洲seo优化报价