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

字符串Base64编码经历了什么

以字符串Test为例,进行Base64编码,进行详解。

1 字符编码阶段

在java中,字符串 Test 首先会按照指定的字符集。转换为字节数据。

String str = "Test" ;
byte[] byte = str.getBytes(StandardCharsets.UTF_8);

对于字符串 Test ,其对应的 Unicode 字符及其字节表示如下:

字符ASCII/Unicode码(十六进制)UTF-8字节表示
T0x54[0x54]
e0x65[0x65]
s0x73[0x73]
t0x74[0x74]

所以Test的字节数组是:

byte[] bytes = new byte[] {0x54, 0x65, 0x73, 0x74};String s = new String( bytes );
System.out.println( s );
// 输出 Test

2 Base64 编码过程

Base64其实是将任意的二进制数据编码为 ASCII 字符串的方法,目的是让二进制数据可以仅支持文本传输或存储的环境下安全的传输。

Base64编码的基本原理是:

  1. 每三个字节的数据被拆分成4组,每组6位;
  2. 每组6位作为索引,在Base64编码表中找到对应的字符;
  3. 如果剩余的字节不足3个,则用 = 填充。

一、先对 [ 0x54, 0x65, 0x73 ] 进行编码:

这3个字节共24位

0x54 -> 01010100
0x65 -> 01100101
0x73 -> 01110011

合并为:

010101  000110  010101  110011

二、查 Base64 表:

6位值十进制Base64编码
01010121V
0001106G
01010121V
11001151z

所以Tes被编码为 VGVz


[0x74] (即字母t) 进行编码:

只有一个字节 0x74 -> 01110100 ,需要填充:

011101  00xxxx   xxxxxx  xxxxxx

补零后变成

011101   000000   000000  000000

查表:

6位值十进制Base64编码
01110129d
0000000A
0000000A
0000000A

最后两个字节是填充的,所以替换为 ==

最终结果为:dA==

合并整个 Test的 Base64 编码:

Tes–> VGVz
t --> dA==

最终结果: VGVzdA==

http://www.lqws.cn/news/134263.html

相关文章:

  • 压测软件-Jmeter
  • 【Pandas】pandas DataFrame sample
  • 机器学习的数学基础:假设检验
  • 从上下文学习和微调看语言模型的泛化:一项对照研究
  • Linux系统iptables防火墙实验拓补
  • WES7系统深度定制全流程详解(从界面剥离到工业部署)
  • 【python】运行python程序的方式
  • 数据湖是什么?数据湖和数据仓库的区别是什么?
  • 不同视角理解三维旋转
  • macOS 上使用 Homebrew 安装redis-cli
  • CanvasGroup篇
  • dvwa9——Weak Session IDs
  • JavaSec-专题-反序列化
  • 使用osqp求解简单二次规划问题
  • LeetCode-934. 最短的桥
  • 树莓派上遇到插入耳机后显示“无输入设备”问题
  • C++课设:通讯录管理系统(vector、map协作实现)
  • MQTT协议:物联网时代的通信基石
  • 使用 LangChain 和 RAG 实现《斗破苍穹》文本问答系
  • 栈-20.有效的括号-力扣(LeetCode)
  • RAG系统中的Re-ranking引擎选择指南
  • Android SharedFlow 详解
  • Unity安卓平台开发,启动app并传参
  • 读文献先读图:GO弦图怎么看?
  • 瀚文(HelloWord)智能键盘项目深度剖析:从0到1的全流程解读
  • Vue跨层级通信
  • 华为云Flexus+DeepSeek征文|实战体验云服务器单机部署和CCE高可用的架构AI赋能
  • 「Java教案」顺序结构
  • JS手写代码篇---手写apply方法
  • Rhino