我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Base64编码中为什么会有等号

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Base64编码中为什么会有等号

这篇文章主要介绍了Base64编码中为什么会有等号的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Base64编码中为什么会有等号文章都会有所收获,下面我们一起来看看吧。

Base64编码中为什么会有等号(=)

如果对字符串"ab"进行Base64编码,得到的结果将是:YWI=,结果中为什么会出现=呢,这就需要了解一下base64编码背后的原理。

Base64是一种便于网络传输的字节码编码方式,之所以叫Base64是由于它的编码结果是由64个可打印字符组成,这些字符在不同系统间是通用的。

64个字符如下表所示

索引

对应字符

索引

对应字符

索引

对应字符

索引

对应字符

0

A

17

R

34

i

51

z

1

B

18

S

35

j

52

0

2

C

19

T

36

k

53

1

3

D

20

U

37

l

54

2

4

E

21

V

38

m

55

3

5

F

22

W

39

n

56

4

6

G

23

X

40

o

57

5

7

H

24

Y

41

p

58

6

8

I

25

Z

42

q

59

7

9

J

26

a

43

r

60

8

10

K

27

b

44

s

61

9

11

L

28

c

45

t

62

+

12

M

29

d

46

u

63

/

13

N

30

e

47

v



14

O

31

f

48

w



15

P

32

g

49

x



16

Q

33

h

50

y



大家可以看到这里面并没 '=' 这个字符,这是因为 ’=‘ 其实是填充字符。

如果需要表示上面的64个字符,那么需要6bit,也就是2^6=64,base64的核心思想就是,将3个

字节拆分成4个6bit,然后对每个6bit的高位补2个0,构成1个字节。也即是每3个字节最终结果将变成4个字节。

如果原始字符串的字节数不是3的整数倍,那么就用0来填充,用来填充的0就被编码成了'=',这就是出现=的原因,并且只会出现在结果出,如果原始字符刚好是3字节的整数倍,那么就没有等号了。

回到开头的例子,我们看下ab是如何计算得到YWI=的。

  • ab对应的ascaii编码的二进制表示为:011000001 01100010

  • 由于只有两个字节,需要填充到3个字段,也就是:011000001 01100010 00000000

  • 拆分成四个6bit:011000 010110 001000 000000

  • 高位补两个0,变成四字节:00011000 00010110 00001000 00000000

  • 按照上表的对应关系:24-Y 22-W 8-I 填充-=, 也即是YWI=。

需要注意填充的0是要被转化成=,而不是上表中的A。

顺便附上golang示例代码

func main() {    str := "ab"    // base64编码    encodedStr := base64.URLEncoding.EncodeToString([]byte(str))    fmt.Println(encodedStr) // YWI=    // base64解码    decodeStr, _ := base64.URLEncoding.DecodeString(encodedStr)    fmt.Println(string(decodeStr)) // ab}

如果不希望保留填充的=,可以在编码后去掉,解码前填充上

示例代码如下:

func main(){    str := "ab"// base64编码encodedStr := base64.URLEncoding.EncodeToString([]byte(str))encodedStr = strings.TrimRight(encodedStr, "=") // 去掉填充的=fmt.Println(encodedStr) // YWI// 解码时,长度不是4的倍数,需要用=填充i := len(encodedStr) % 4if i != 0 {encodedStr += strings.Repeat("=", 4-i) }// base64解码decodeStr, _ := base64.URLEncoding.DecodeString(encodedStr)fmt.Println(string(decodeStr)) // ab}

关于“Base64编码中为什么会有等号”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“Base64编码中为什么会有等号”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Base64编码中为什么会有等号

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Base64编码中为什么会有等号

这篇文章主要介绍了Base64编码中为什么会有等号的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Base64编码中为什么会有等号文章都会有所收获,下面我们一起来看看吧。Base64编码中为什么会有等号(=)如果
2023-07-05

解读Base64编码中为什么会有等号(=)问题

这篇文章主要介绍了解读Base64编码中为什么会有等号(=)问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-06

java中Quoted-printable和Base64编码有什么区别

Quoted-printable和Base64是两种常见的编码方式,用于将二进制数据转换为可打印字符的文本格式。Quoted-printable编码:主要用于文本和邮件,将非ASCII字符(如中文、特殊字符)转换为ASCII字符。使用"=
2023-10-24

CSS中图片Base64编码是什么

小编给大家分享一下CSS中图片Base64编码是什么,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!什么是 base64 编码?  我不是来讲概念的,直接切入正题,图片的 base64 编码就是可以将一副图片数据编码成一串字
2023-06-15

JavaScript中的base64编码原理是什么

今天小编给大家分享一下JavaScript中的base64编码原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。bas
2023-07-05

为什么会存在乱码?什么是编解码?为什么会有这么多字符集?

我们知道计算机里存储的只会是 0 和 1 组成的字节流,而仅是数字满足不了我们的需求,我们还需要文本的处理等等,但是计算机只认识数字,所以我们需要告诉计算机什么数字代表什么字符。

JavaScript中的Base64编码字符串是什么

今天小编给大家分享一下JavaScript中的Base64编码字符串是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。初步
2023-07-05

JAVA 中实现 Base64 编码的三种方式分别是什么?(JAVA实现Base64编码的三种方式)

在JAVA编程中,Base64编码是一种常用的数据编码方式,它将二进制数据编码为ASCII字符串,以便在网络传输或存储中使用。以下是JAVA实现Base64编码的三种方式:方式一:使用Java.util.Base64类
JAVA 中实现 Base64 编码的三种方式分别是什么?(JAVA实现Base64编码的三种方式)
Java2024-12-14

Java中怎么将base64编码字符串转换为图片

本篇内容介绍了“Java中怎么将base64编码字符串转换为图片”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!将base64编码字符串转换为
2023-07-05

为什么会有这么多编程语言?

在编程语言如此丰富的今天,相信许多开发者都有过上面的疑问。不过早在 1960 年代初,人们就已经提出了这个问题。

php用header设置了utf8编码为什么还会乱码

在PHP中,使用`header()`函数设置编码为utf-8只是告诉浏览器将响应的内容按照utf-8编码进行解析。然而,如果你的网页内容本身不是utf-8编码,或者在输出之前对内容进行了其他操作,例如从数据库中获取数据、处理字符串等,那么最
2023-08-18

BI系统中为什么会有很多快照表

如果不对这个问题加以特别处理,就会导致 BI 系统中(针对历史数据)的统计值和 ERP 系统中(针对当时的数据)的统计值对不上的现象,而且这种错误还很难排查。

为什么VB.NET模块在C#等语言中是没有的

小编给大家分享一下为什么VB.NET模块在C#等语言中是没有的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!首先,这是一个历史原因。早先的VB语言都有模块和类模块
2023-06-17

为什么mockgen会生成文件中的所有接口?

在Golang实战开发的过程中,我们经常会遇到一些这样那样的问题,然后要卡好半天,等问题解决了才发现原来一些细节知识点还是没有掌握好。今天编程网就整理分享《为什么mockgen会生成文件中的所有接口?》,聊聊,希望可以帮助到正在努力赚钱的你
为什么mockgen会生成文件中的所有接口?
2024-04-05

在Javascript中为什么 0.1+0.2 不等于0.3 ? 源代码详细解析

JavaScript中0.1 + 0.2不等于0.3的原因是浮点数计算的精度问题。由于浮点数在二进制中是无限循环的,计算机在进行浮点数计算时会存在舍入误差。为了解决这个问题,我们可以使用舍入函数或将浮点数转换为整数进行计算。

为什么线程有时会在 MySQL 中保持“killed”状态?

MySQL 为每个客户端连接使用单独的线程。发送到 MySQL 的查询由先前与查询的连接关联的线程处理。任何拥有足够权限的人都可以通过运行SHOW PROCESSLIST命令查看当前活动线程的列表以及一些其他详细信息,该命令返回一个类似表的
MySQLkilled2024-12-01

不会吧不会吧?真的有人认为程序员很轻松么!如何对抗编码焦虑?

你觉得编程是一份有压力的工作吗?很多人不这么认为,但事实证明编码焦虑是真实存在的。你真的有必要学习一些技巧,在必要的时候对抗编码焦虑。

为什么只有Unicode是不够的,UTF-8如何解决编码问题?

Unicode是一种字符集,它为世界上几乎所有的字符分配了一个唯一的标识符,以便计算机可以理解和处理各种语言的文本。Unicode的目标是为全球范围内的每个字符提供一个唯一的标识符。

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录