Base64编码的原理与常用实现

article/2025/9/13 6:22:41

这篇主要是为了后面好介绍加密算法,做的铺垫。
这个是基础,什么是一个程序员的涵养,这些基础就是涵养。
平时可能用不到,但必须得会。
如果连这个原理都说不上来,就别玩王者荣耀绝地求生英雄联盟和平精英了,该好好补补了。

Base64编码定义

Base64编码是基于64个字符的编码方式。
所有的二进制数据都可以用这64个编码来表示。
怎么编码,64个字符有哪些,是基于一个规范的:RFC2045

Base64编码特点

Base64编码是可逆的。
编码后的结果,没有任何可读性。
适用性广泛,任何能转成二进制数的数据都能Base64编码。

Base64编码原理

Base64编码入参是二进制数
首先有个编码对照表,索引从0到63总共64个,对应着(A-Z)加(a-z)加(0-9)加(+)加(/)刚好64个字符。
在这里插入图片描述
编码有以下几步:
1、将数据拆成若干组,每组3个字节,即24位。
2、每组数据24位进行重组,分为4部分,那么每部分就是6位。
3、将每部分的高位补两个0,那么每部分都成8位了,即一个字节。此时这个组总共就是4个字节。
4、将每个字节的值换成10进制,由于高两位都是0,所以该字节的十进制数,最大就是63,最小是0,正好和上面的64个编码表的索引对上,然后得到对应字符。合起来就是最终编码的值。

如果数据的总字节数,不是3的倍数,那么就存在最后一组不够3个字节。这种情况,就还是按照上面的编码规则继续编(字节换成位,每6位高位补两个0变成一个字节)
情况1:
最后一组只有两个字节,那就是16位,
前6位,高位补两个0 ,变成一个字节,对照表拿到对应的第一个字符;
中间6位,高位补两个0 ,变成一个字节,对照表拿到对应的第二个字符;
后4位,高位补4个0,变成一个字节,对照表拿到对应的第三个字符;
第四个字符默认用=代替。
情况2
最后一组只有一个字节,那就是8位,
前6位,高位补两个0 ,变成一个字节,对照表拿到对应的第一个字符;
后2位,高位补6个0,变成一个字节,对照表拿到对应的第二个字符;
第三个字符和第四个字符默认都用=代替。

这也就是为什么,有时候看到的编码结果,结尾会有=或者==,就是这种不够的情况。
另外,每76个字符加一个换行符,这个是规定。

解码就反过来操作,是不是很简单。不考虑性能的话,完全可以自己尝试写一个Base64编码工具类玩玩。

Base64衍生编码方式

Base 16
Base 32
Url Base64

看过Base64的原理,Base16和Base32的就类似了,都是拆字节,然后高位补0,使得新的字节,最大是16或者32,然后照着表找对应字符。

url Base64的出现,是因为标准的Base64,最后两个字符+/在url中不能作为参数,所以url Base64主要改动就是把这两个字符换成了-和_。

Base64编码常见实现

Base64的实现有很多种,常见的两个:JDK的和Apache的

JDK的Base64
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
import java.io.IOException;public class Base64Test {public static void main(String[] args) throws IOException {String str = "hello word";BASE64Encoder base64Encoder = new BASE64Encoder();// JDK Base64加密String encode = base64Encoder.encode(str.getBytes());System.out.println(encode);BASE64Decoder base64Decoder = new BASE64Decoder();// JDK Base64解密byte[] bytes = base64Decoder.decodeBuffer(encode);String res = new String(bytes);System.out.println(res);}
}
Apache的Base64

引入pom依赖:

<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
<dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.14</version>
</dependency>
import org.apache.commons.codec.binary.Base64;public class ApacheBase64Test {public static void main(String[] args) {String str = "hello word";// Apache Base64加密byte[] encodeBytes = Base64.encodeBase64(str.getBytes());System.out.println(new String(encodeBytes));// Apache Base64解密byte[] decodeBytes = Base64.decodeBase64(encodeBytes);System.out.println(new String(decodeBytes));}
}

当然,上面两个的结果都是:

aGVsbG8gd29yZA==
hello word

http://chatgpt.dhexx.cn/article/7h7xZIUH.shtml

相关文章

Base64原理及魔改更换码表

一&#xff0c;Base64是什么&#xff08;原理比较难理解&#xff0c;可参考下面的实践 &#xff09; Base64是一种基于64个可打印字符来表示二进制数据的表示方法。由于2的6次方等于64&#xff0c;所以每6个比特为一个单元&#xff0c;对应某个可打印字符。三个字节有24个比特…

base64加密原理解析

开发者对Base64编码肯定很熟悉&#xff0c;是否对它有很清晰的认识就不一定了。实际 上Base64已经简单到不能再简单了&#xff0c;如果对它的理解还是模棱两可实在不应该。大概介绍一下Base64的相关内容&#xff0c;花几分钟时间就可以彻底理解它。文 章下边贴了一个Base64的编…

Base64加密原理

Base64加密方式是将三个八位的字节转化为四个六位的字节&#xff08;不足八位的高位补00&#xff09;&#xff0c;3*8 4*6&#xff1b;&#xff0c;所以base64加密过后的内容比原来的大三分之一&#xff1b; 举例&#xff1a;加密“ace”&#xff0c; ace转化为二进制为&…

Base64编码原理分析

文章目录 一、认识&#xff08;一&#xff09;认识&#xff08;二&#xff09;计算&#xff08;1&#xff09;规则&#xff08;2&#xff09;示例&#xff08;3&#xff09;Base64编码转换表 二、网页图片转base64编码分析&#xff08;一&#xff09;Data URI&#xff08;二&am…

base64编码,原理是什么,有什么作用?

base64到底是什么东西呢&#xff1f; Base64编码是网络上常见的用于传输8bit字节数据的一种编码方式之一 , 有些人和书本会将编码写成加密算法&#xff0c;这其实是欠妥的。因为任何人拿到编码后的数据都能转化成原始数据&#xff0c;算法是透明的&#xff0c;也不存在秘钥的概…

一篇文章彻底掌握Base64编码原理

一篇文章彻底掌握Base64编码原理 在互联网中的每一刻&#xff0c;你可能都在享受着Base64带来的便捷&#xff0c;但对于Base64的基础原理又了解多少&#xff1f;今天这篇博文带领大家了解一下Base64的底层实现。 Base64的由来 目前Base64已经成为网络上常见的传输8Bit字节代…

Base64编码解码原理详解

Base64编码解码原理详解 1. Base64字符的组成部分 Base64所用字符&#xff1a; 0,1,2 ….9 A,B,C,D…Z a,b,c,d…z / 对应ASCII&#xff1a; 48,49…58,65,66…90,97,98…122, 43,47 2. 10个数字&#xff0c;26个大写字母&#xff0c;26个小写字母&#xff0c;1个&#xff0c…

彻底弄懂base64的编码与解码原理

作者介绍 背景 base64的编码原理网上讲解较多&#xff0c;但解码原理讲解较少&#xff0c;并且没有对其中的内部实现原理进行剖析。想要彻底了解base64的编码与解码原理&#xff0c;请耐心看完此文&#xff0c;你一定会有所收获。 涉及算法与逻辑运算概念 在探究base64编码原理…

深入理解 Base64 底层原理

Base64 是一种常见数据编码方式&#xff0c;常用于数据传输。对于移动开发者来讲&#xff0c;网络请求中会经常使用到。对 JSON 熟悉的同学都知道&#xff0c;JSON 的序列化工具都不支持将 byte 数组直接放入 JSON 数据中&#xff0c;针对这种二进制数据&#xff0c;在处理的时…

Base64基本原理

1.什么是Base64 Base64是一种基于64个可打印字符来表示二进制数据的编码方式&#xff0c;是从二进制数据到字符的过程。 原则上&#xff0c;计算机中所有内容都是二进制形式存储的&#xff0c;所以所有内容&#xff08;包括文本、影音、图片等&#xff09;都可以用base64来表示…

一篇文章彻底弄懂Base64编码原理

在互联网中的每一刻&#xff0c;你可能都在享受着Base64带来的便捷&#xff0c;但对于Base64的基础原理又了解多少&#xff1f;今天这篇博文带领大家了解一下Base64的底层实现。 Base64的由来 目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一。在做支付系统时&…

Base64编码原理

一、Base64是什么 base 64、base 32、base 16 编码建议标准 https://www.ietf.org/rfc/rfc4648.txt Base64是基于64种字符的编码算法&#xff0c;即将数据使用64种字符表示&#xff0c;编码后的Base64字符串长度 通常为原来的3-4倍。&#xff08;补充&#xff1a;Base32就是…

Base64原理

前言 Base64是什么?它和加解密操作有什么关系吗?我们看一下下边这段字符串: aGVsbG8gd29ybGQ= 这就是经过Base64编码后的字符串,对它进行Base64解码,获得它原来的内容: hello world 这有点加密解密的意味,不过Base64并不能称为加密算法,仅仅是加密算法的近亲,可以称之…

Base64原理解析

一. Base64编码由来 为什么会有Base64编码呢&#xff1f;因为有些网络传送渠道并不支持所有的字节&#xff0c;例如传统的邮件只支持可见字符的传送&#xff0c;像ASCII码的控制字符就 不能通过邮件传送。这样用途就受到了很大的限制&#xff0c;比如图片二进制流的每个字节不可…

base64加密原理详解

Base64编码&#xff0c;是我们程序开发中经常使用到的编码方法。它是一种基于用64个可打印字符来表示二进制数据的表示方法。它通常用作存储、传输一些二进制数据编码方法&#xff01;也是MIME&#xff08;多用途互联网邮件扩展&#xff0c;主要用作电子邮件标准&#xff09;中…

Base64基本原理及简单应用

1.什么是Base64 Base64是一种基于64个可打印字符来表示二进制数据的编码方式,是从二进制数据到字符的过程。原则上,计算机中所有内容都是二进制形式存储的,所以所有内容(包括文本、影音、图片等)都可以用base64来表示。 2.Base64编码原理 Base64编码之所以称为Base64,是因…

一文详解 Base64编码原理

最近在看Android的签名与验签机制&#xff0c;其中涉及到 MD5、SHA2、SHA256 等摘要算法&#xff0c;也涉及到 Base64 编码机制。这里先从简单的入手&#xff0c;记录一下 Base64 编码机制的原理。 一、Base64由来 Base64 是一种编码方式&#xff0c;最早出现在电子邮件传输协…

在Unity中导入fbx格式文件

unity中是以米为单位&#xff0c;要想让3dmax中建的模型导入到unity中与unity自带的3d object尺寸一致&#xff0c;最直接的办法是将3dmax中的系统单位也设成米。在三维软件里设置 在菜单->自定义->单位设置&#xff1a; 导出FBX文件前 &#xff0c;我们需要注意如下问…

读取FBX文件踩坑清单

FBX文件得到了许多3D制图软件与3D游戏引擎的兼容&#xff0c;其发展趋势大好。因此若要编写一款3D图形系统&#xff0c;对FBX格式的支持是必经之路&#xff08;或者使用插件形式&#xff09;。笔者尝试在百度、必应等搜索引擎&#xff0c;外加fbxsdk实例的帮助下&#xff0c;读…

查看fbx文件

查看fbx文件可以使用 1.auto fbx review 2.unity 导入Inport New Asset 找到文件夹导入 拖拽到scene中即可查看