> 文档中心 > 什么是Base64,应用场景有哪些

什么是Base64,应用场景有哪些

什么是Base64,应用场景有哪些

    • 什么是Base64:
    • Base64到底是加密,还是编码:
    • Base64应用场景:
    • java 开发中使用Base64:

我们经常在工作中听到类似的东西。加密,解密,编码,解码之类的字眼。其实很多同学,特别是转行培训出来的在这个时候往往是装聋作哑的,为什么呢? 因为不知道啊,而且很多人也不知道。很多兄的的工作焦虑就是从这里来的。

下来也不利用业余时间充电,那么就会被行业慢慢淘汰。所以咱们不能好高骛远,把基础学好。以后不说大富大贵,过上中产生活还是没什么大问题。

什么是Base64:

字符编码不太了解得同学可以先去看看我的博客:深入浅出:java开发中,字符集编码详解.

我们知道,计算机不认识我们人类的语言。比如”张三“这样一个字符串,计算机认识吗?不认识。 计算机只认识0和1。 那么怎么办呢?

  1. 我们认识”张三“,
  2. 计算机认识0和1。

有了这两个条件,人类就发明了一种方式:字符集编码 来规范和规定了人类和计算机之间的交流。
随着历史的推进,和各种人类语言的加入,字符集编码也拥有不少的版本。比如UTF-8、GBK等等。。。

但是人们渐渐的发现了两个问题,在网络数据传输的时候

  1. 网络传输只能传输可打印字符(在ASCII码中规定,0-31、128这33个字符属于控制字符,32~127这95个字符属于可打印字符,也就是说网络传输只能传输这95个字符,不在这个范围内的字符无法传输)
  2. 安全性,数据人人可见人人可解读,那还有什么安全可言呢?

这个时候Base64就站出来了。
Base64立马就解决了这两个问题。

  1. 文件传输的时候,会产生很多不可打印字符,网络传输不支持不可打印字符。 Base64将所有数据编码为可打印字符,完成了网络传输。
  2. 将文件明文通过编码(加密)成为不可一眼就可看懂的字符串,形成了一个弱弱的但不可或缺的加密操作。

这里我们不过多讲述Base64底层是如何编码的,简单的帖一张Base64的转换表: Base64、Base64那么肯定是64个字符:

在这里插入图片描述

Base64到底是加密,还是编码:

这个问题可以说是见仁见智。
我个人觉得Base64主要作用是兼容了ASCII系统和非ASCII系统之间的网络交易。 并且解决了网络传输中的”不可打印字符“问题
要说它加密没有,那确实是加密了,但属于是人人都可以破解的简易加密。所以我们在程序开发中,真正对数据加密的时候一般不使用Base64。(人人都知道如何解密的算法就不能称之为加密算法)

Base64应用场景:

其实很多时候我们都在用Base64。这里我就举一个我实际项目中使用到的一个例子:

  1. 项目中 我们把一些比较小的图片保存在数据库中,用一个字段来保存。
    但是呢,前端页面有时候会需要展示这些图片到页面上。 我们直接返回数据库中保存的数据有时候会出现问题(网络不能传输不可打印字符)。这个时候我们后端把文件数据返回前端的时候需要将数据转换为Base64编码后的字符串。 好! 这个时候前端就能自动解析并把图片展示出来。

  2. URL编码
    2.1. 我们都知道,http请求,在解析参数时是根据?和=号去解析的。那么当key value中包含=号时,参数解析就会错误。
    2.2. 还有当url出现汉字时,会自动编码。
    所以如果http传输URL中有汉字,就必须编码后使用。但是麻烦的是 标准的国际组织并没有规定具体的编码方法,而是交给应用程序(浏览器)自己决定。 这导致"URL编码"成为了一个混乱的领域。

把要编码的字符转成16进制字符,前加%。所以看到很多%,就可以判断是url编码!

java 开发中使用Base64:

直接拷贝使用即可:

import java.io.UnsupportedEncodingException;import java.util.Base64;/** */public class JavaBase64Util {    public static final String UTF_8 = "UTF-8";    public static Base64.Encoder encoder;    //即为安全的编码方式,替换“+” “/” “-”为“_”    public static Base64.Encoder urlEncoder;    public static Base64.Decoder decoder;    public static Base64.Decoder urlDecoder;    static { encoder = Base64.getEncoder(); urlEncoder = Base64.getUrlEncoder(); decoder = Base64.getDecoder(); urlDecoder = Base64.getUrlDecoder();    }    //encode    public static byte[] encode(byte[] bytes) { return encoder.encode(bytes);    }    public static String encode(String string) { byte[] encode = encode(string.getBytes()); try {     return new String(encode, UTF_8); } catch (UnsupportedEncodingException e) {     e.printStackTrace(); } return null;    }    public static String encode2String(byte[] bytes) { return encoder.encodeToString(bytes);    }    public static byte[] encode2Byte(String string) { return encode(string.getBytes());    }    //urlEncoder    public static byte[] urlEncode(byte[] bytes) { return urlEncoder.encode(bytes);    }    public static String urlEncode(String string) { byte[] encode = urlEncode(string.getBytes()); try {     return new String(encode, UTF_8); } catch (UnsupportedEncodingException e) {     e.printStackTrace(); } return null;    }    public static String urlEncode2String(byte[] bytes) { return urlEncoder.encodeToString(bytes);    }    public static byte[] urlEncode2Byte(String string) { return urlEncode(string.getBytes());    }    //decode    public static byte[] decode(byte[] bytes) { return decoder.decode(bytes);    }    public static byte[] decode2Byte(String string) { return decoder.decode(string.getBytes());    }    public static String decode2String(byte[] bytes) { try {     return new String(decoder.decode(bytes),UTF_8); } catch (UnsupportedEncodingException e) {     e.printStackTrace(); } return null;    }    public static String decode(String string) { byte[] decode = decode(string.getBytes()); try {     return new String(decode, UTF_8); } catch (UnsupportedEncodingException e) {     e.printStackTrace(); } return null;    }    //urlDecode    public static byte[] urlDecode(byte[] bytes) { return urlDecoder.decode(bytes);    }    public static byte[] urlDecode2Byte(String string) { return urlDecode(string.getBytes());    }    public static String urlDecode2String(byte[] bytes) { try {     return new String(urlDecode(bytes),UTF_8); } catch (UnsupportedEncodingException e) {     e.printStackTrace(); } return null;    }    public static String urlDecode(String string) { byte[] decode = urlDecode(string.getBytes()); try {     return new String(decode, UTF_8); } catch (UnsupportedEncodingException e) {     e.printStackTrace(); } return null;    }}