Base64编码

字符对应表

上表就是用来表示Base64,一共64个字符,A-Z,a-z,0-9,+,-,还有=(作为补位)

无论将文件,字符串,还是什么转为Base64,一定是用上表的字符表示。

转换方式是将三个字节分为一个单元,因为一个字节占8位,所以一个单元就是24位,然后将一个单元又分为四个部分,每一部分
是6位,在每个部分前面补00,于是一个单元就变成了32位,也就是4个字节,然后算出每一部分的十进制,再对应Base64字符对应表上面的
符号,一单元的四个部分加起来就是Base64,说得比较抽象,我们用图来说话

如上图我们对字符串"LIU"进行Base64编码,因为刚好为3个字节,所以为一个单元,LIU对应的ASCII码为76,73,85,对应的二进制分别为
01001100,01001001,01010101,然后将其分为四部分并补0后为,00010011,00000100,00100101,00010101,它们所对应的Base64
索引和字符为,19(T) , 4(E) , 37(l) , 21(V) , 所以"LIU"编译后的Base64编码为"TElV"

如果是两个字节

两个字节的情况分为三组,第三组只有四位(1001),这时候要再首尾都加2个0,为(00100100),计算出来是 TEk ,因为只有两个字节,所以第三个用=代替,加上=,
TEk=

如果一个字节



一个字节则分为两组,第二组为00,前面补00,后面补0000,为(00000000),在Base64上面对应A,所以为"TA",因为为一个字节,所以后两个用==代替,为 TA==

汉字转为Base64编码

对于汉字转Base64编码,首先要确定编码方式,又utf-8,utf-16,utf-32,gbk等等,每种编码的汉字对应的Base64是不相同的,比如"刘"的编码方式为utf-8
,那么用Base64编码后为5YiY,如果编码方式为utf-16,那么经过Base64编码后为**/v9SGA==**,所以不同的编码方式对应不同的Base64编码,
如果用utf-8编码的文字转为Base64编码,用utf-16对Base64进行解码,那么解码得到的将为乱码。

JAVA API

编码

  1. Base64.getEncoder().encode(byte[] bytes);
  2. Base64.getEncoder().encodeToString(byte[] bytes);
    and so on

解码

  1. Base64.getDecoder().decode(byte[] bytes);
  2. and so on

示例

  1. /**
  2. * TODO
  3. *
  4. * @author 刘牌
  5. * @version 1.0
  6. * @date 2021/9/7 0007 21:25
  7. */
  8. public class Base64Test {
  9. public static void main(String[] args) {
  10. String str = "LIU";
  11. String s = Base64.getEncoder().encodeToString(str.getBytes(Charset.forName("utf-16")));
  12. System.out.println(s);
  13. byte[] bytes = Base64.getDecoder().decode(s.getBytes());
  14. String s1 = new String(bytes, Charset.forName("utf-16"));
  15. System.out.println(s1);
  16. }
  17. }

一文读懂Base64编码的更多相关文章

  1. 从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路

    本文原作者阮一峰,作者博客:ruanyifeng.com. 1.引言 HTTP 协议是最重要的互联网基础协议之一,它从最初的仅为浏览网页的目的进化到现在,已经是短连接通信的事实工业标准,最新版本 HT ...

  2. [转帖]MerkleDAG全面解析 一文读懂什么是默克尔有向无环图

    MerkleDAG全面解析 一文读懂什么是默克尔有向无环图 2018-08-16 15:58区块链/技术 MerkleDAG作为IPFS的核心数据结构,它融合了Merkle Tree和DAG的优点,今 ...

  3. [转帖]从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路

    从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路   http://www.52im.net/thread-1709-1-2.html     本文原作者阮一峰,作者博客:r ...

  4. 大数据篇:一文读懂@数据仓库(PPT文字版)

    大数据篇:一文读懂@数据仓库 1 网络词汇总结 1.1 数据中台 数据中台是聚合和治理跨域数据,将数据抽象封装成服务,提供给前台以业务价值的逻辑概念. 数据中台是一套可持续"让企业的数据用起 ...

  5. 一文读懂HTTP/2及HTTP/3特性

    摘要: 学习 HTTP/2 与 HTTP/3. 前言 HTTP/2 相比于 HTTP/1,可以说是大幅度提高了网页的性能,只需要升级到该协议就可以减少很多之前需要做的性能优化工作,当然兼容问题以及如何 ...

  6. 一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现

    一文读懂AI简史:当年各国烧钱许下的愿,有些至今仍未实现 导读:近日,马云.马化腾.李彦宏等互联网大佬纷纷亮相2018世界人工智能大会,并登台演讲.关于人工智能的现状与未来,他们提出了各自的观点,也引 ...

  7. 一文读懂高性能网络编程中的I/O模型

    1.前言 随着互联网的发展,面对海量用户高并发业务,传统的阻塞式的服务端架构模式已经无能为力.本文(和下篇<高性能网络编程(六):一文读懂高性能网络编程中的线程模型>)旨在为大家提供有用的 ...

  8. 一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm)

    一文读懂 深度强化学习算法 A3C (Actor-Critic Algorithm) 2017-12-25  16:29:19   对于 A3C 算法感觉自己总是一知半解,现将其梳理一下,记录在此,也 ...

  9. [转帖]一文读懂 HTTP/2

    一文读懂 HTTP/2 http://support.upyun.com/hc/kb/article/1048799/ 又小拍 • 发表于:2017年05月18日 15:34:45 • 更新于:201 ...

随机推荐

  1. 那些 Unix 命令替代品们「GitHub 热点速览 v.21.32」

    作者:HelloGitHub-小鱼干 好用的 Unix 命令替代工具能让你事半功倍,例如,bat 便是个带着高亮特性的加强版 cat,就像你用了 oh my zsh 之后便会感受到它的强大.同样好用的 ...

  2. UI:PointerEventData

    原因:判断是否将一个UI物体拖放到另一个UI物体上面. 1.拖拽实现可以直接用EventTrigger组件或者自己实现拖拽事件的接口完成: 2.在OnDrag方法中借助PointEventData事件 ...

  3. ABP框架使用Oracle数据库,并实现从SQLServer中进行数据迁移的处理

    ABP框架的数据访问底层是基于EFCore(Entity Framework Core)的,是微软标志性且成熟的ORM,因此它本身是支持多种主流数据库MySQL,SqlServer,Oracle,SQ ...

  4. Java横向技术 网络【笔记】

    Java横向技术 网络[笔记] 计算机网络 服务器返回给客户端 http 响应包的状态码有哪几大类?302.304 分别是什么意思? ​ 状态码分为五大类: ​(1)信息性状态码(Informatio ...

  5. [源码解析] 机器学习参数服务器Paracel (3)------数据处理

    [源码解析] 机器学习参数服务器Paracel (3)------数据处理 目录 [源码解析] 机器学习参数服务器Paracel (3)------数据处理 0x00 摘要 0x01 切分需要 1.1 ...

  6. NOIP 模拟 $33\; \rm Defence$

    题解 \(by\;zj\varphi\) 题意就是维护 \(\rm max\{01mx,01l+01r\}\) 就是最长连续的一段 \(0\),左右 \(0\) 区间的加和. 可以启发式合并,也可以直 ...

  7. Golang在Linux系统中实现微秒级延迟

    在程序中延迟或者等待一段时间一般可以使用Sleep函数实现,但是因为操作系统线程调度的消耗,往往只能做到十几或者数十毫秒的精度,很难达到微秒级,Golang的time.Sleep也是如此. Sleep ...

  8. ApacheDubbo

    一.什么是ApacheDubbo Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能.轻量级的开源 Java RPC 分布式服务框架,它提供了三大核心能力:面向接口的远 ...

  9. springboot配置ssl-pfx

    application.yml server: port: 9443 ssl: key-store: classpath:4148017_qra.meeno.net.pfx key-store-typ ...

  10. SpringCloud(5)之分布式锁实现

    01为什么用分布式锁 在讨论这个问题之前,我们先来看一个业务场景:系统A是一个电商系统,目前是一台机器部署,系统中有一个用户下订单的接口,但是用户下订单之前一定要去检查一下库存,确保库存足够了才会给用 ...