豁然高

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

base64编码

Base64是一种用64个可打印字符来表示任意二进制数据的方法。

 

base64编解码就是将二进制数据和64中可打印字符的相互转化。

 

转化原理

1,将二进制数据每三个字节分为一组,每个字节占8bit,那么共有24个二进制位。

2,将上面的24个二进制位每6个一组,共分为4组。

3,在每组前添加2个0,每组由6个变为8个二进制位,总共32个二进制位,也就是四个字节。

4,根据base64编码对照表将每个字节转化成对应的可打印字符

 

转化实例如下图

 

 

 

 

问题:

1,为什么每6位分为一组?

  因为6个二进制位就是2的6次方,也就是64种变化,正好对应64个可打印字符。

  举一反三,如果是5位一组,那就对应32种可打印字符,就可以设计base32了。

2,分成四组后为什么每组添2个0变成四个字节?

  因为计算机存储的最小单位就是字节,也就是8位。所以每组6位前添2个0凑成8位的一个字节才能存储。

 

标准的base64编码对照表如下。

标准base64的64个可打印字符由52个大小写英文字母和10个数字(0-9)以及  / 和 + 组成。

 

 

base64是将二进制每三个字节转为4个字节,再根据base64编码对照表进行转化。那如果不足三个字节该如何?

对于标准base64是按如下处理的:

两个字节:两个字节共16个二进制位,依旧按照规则进行分组。此时总共16个二进制位,每6个一组,则第三组缺少2位,用0补齐,得到三个Base64编码,第四组完全没有数据则用“=”补上。

因此,如下图中“BC”转换之后为“QKM=”;
一个字节:一个字节共8个二进制位,依旧按照规则进行分组。此时共8个二进制位,每6个一组,则第二组缺少4位,用0补齐,得到两个Base64编码,而后面两组没有对应数据,都用“=”补上。

因此,如下图中“A”转换之后为“QQ==”

 

 

由于标准base64的64个可打印字符由52个大小写英文字母10个数字(0-9)以及  /+ 组成。而对于不足字节有需要用 = 来补齐字节。

所以经过标准base64编码后,就有可能包含+ /  = 这三种字符。

而在URL编码中这三种字符要么需要编码成%XX的形式,要么具有特殊意义。

所以标准的base64一般不用于对URL进行编码。

所以有些非标准的base64编码会把字符 +  / 分别变成 -  _ 或者其他字符,并且不会用 = 进行补位。

这样就可以对URL进行编码或者用于其它用途的编码

  

posted on   豁然高  阅读(715)  评论(0编辑  收藏  举报

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示