一文读懂Base64编码

简介: 一文读懂Base64编码

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


编码


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


解码


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


示例


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



目录
相关文章
|
6月前
火山中文编程 -- HEX编码与BASE64编码
火山中文编程 -- HEX编码与BASE64编码
65 0
|
5月前
|
存储 前端开发 数据安全/隐私保护
Base64详解:从编码原理到应用实践
Base64详解:从编码原理到应用实践
|
数据采集 算法 安全
Base64 编码原理 && 实现
Base64 编码原理 && 实现
101 0
|
存储 数据库 索引
深入浅出理解base编码
深入浅出理解base编码
234 0
深入浅出理解base编码
|
Java
小程序中base64解码/编码
很多人都在为小程序如何实现base64编码/解码困扰,于是我参考前端大佬们对JavaScript中实现base64的文章进行了改写。简单实现了一个。。希望能帮助到小程序开发一线的大家吧、 不多说直接上代码: /** * UTF16和UTF8转换对照表 * U+00000000 – U+000000...
4899 13
|
前端开发 JavaScript
前端实现 base64 编码和解码
前端实现 base64 编码和解码
577 0
前端实现 base64 编码和解码
|
XML 存储 JSON
Base64编码理解与实现(编码图片)
Base64是一种数据编码方式,目的是让数据符合传输协议的要求。 在项目中,将报文进行压缩、加密后,最后一步必然是使用base64编码,因为base64编码的字符串,更适合不同平台、不同语言的传输
336 0
|
XML 存储 算法
为啥要 base64 编码?
为啥要 base64 编码?
279 0
为啥要 base64 编码?
|
编解码 Go 区块链
Go语言实现Base64、Base58编码与解码
目录 1. 常见的编码 2. go语言实现base64的编码与解码 2.1 Base64编码原理 2.2 实现Base64的编码与解码 3. go语言实现base58编码与解码 3.1 base58的编码过程 3.2 base58编解码具体实现 4. 最后
397 0
Go语言实现Base64、Base58编码与解码
|
算法 区块链 索引
【密码学】Base64 编码 ( Base64 简介 | Base64 编码原理 | 最后编码组字节不足时补位 ‘=‘ 符号 | Base64 编码实现参考 )(一)
【密码学】Base64 编码 ( Base64 简介 | Base64 编码原理 | 最后编码组字节不足时补位 ‘=‘ 符号 | Base64 编码实现参考 )(一)
433 0
【密码学】Base64 编码 ( Base64 简介 | Base64 编码原理 | 最后编码组字节不足时补位 ‘=‘ 符号 | Base64 编码实现参考 )(一)