最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解讀Base64編碼中為什么會(huì)有等號(hào)(=)問題

 更新時(shí)間:2023年03月06日 10:39:41   作者:waitchen  
這篇文章主要介紹了解讀Base64編碼中為什么會(huì)有等號(hào)(=)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Base64編碼中為什么會(huì)有等號(hào)(=)

如果對(duì)字符串"ab"進(jìn)行Base64編碼,得到的結(jié)果將是:YWI=,結(jié)果中為什么會(huì)出現(xiàn)=呢,這就需要了解一下base64編碼背后的原理。

Base64是一種便于網(wǎng)絡(luò)傳輸?shù)淖止?jié)碼編碼方式,之所以叫Base64是由于它的編碼結(jié)果是由64個(gè)可打印字符組成,這些字符在不同系統(tǒng)間是通用的。

64個(gè)字符如下表所示

索引

對(duì)應(yīng)字符

索引

對(duì)應(yīng)字符

索引

對(duì)應(yīng)字符

索引

對(duì)應(yīng)字符

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

大家可以看到這里面并沒 '=' 這個(gè)字符,這是因?yàn)?’=‘ 其實(shí)是填充字符。

如果需要表示上面的64個(gè)字符,那么需要6bit,也就是2^6=64,base64的核心思想就是,將3個(gè)

字節(jié)拆分成4個(gè)6bit,然后對(duì)每個(gè)6bit的高位補(bǔ)2個(gè)0,構(gòu)成1個(gè)字節(jié)。也即是每3個(gè)字節(jié)最終結(jié)果將變成4個(gè)字節(jié)。

如果原始字符串的字節(jié)數(shù)不是3的整數(shù)倍,那么就用0來填充,用來填充的0就被編碼成了'=',這就是出現(xiàn)=的原因,并且只會(huì)出現(xiàn)在結(jié)果出,如果原始字符剛好是3字節(jié)的整數(shù)倍,那么就沒有等號(hào)了。

回到開頭的例子,我們看下ab是如何計(jì)算得到Y(jié)WI=的。

  • 1、ab對(duì)應(yīng)的ascaii編碼的二進(jìn)制表示為:011000001 01100010
  • 2、由于只有兩個(gè)字節(jié),需要填充到3個(gè)字段,也就是:011000001 01100010 00000000
  • 3、拆分成四個(gè)6bit:011000 010110 001000 000000
  • 4、高位補(bǔ)兩個(gè)0,變成四字節(jié):00011000 00010110 00001000 00000000
  • 5、按照上表的對(duì)應(yīng)關(guān)系:24-Y 22-W 8-I 填充-=, 也即是YWI=。

需要注意填充的0是要被轉(zhuǎn)化成=,而不是上表中的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
	// 解碼時(shí),長度不是4的倍數(shù),需要用=填充
	i := len(encodedStr) % 4
	if i != 0 {
		encodedStr += strings.Repeat("=", 4-i) 
	}
	// base64解碼
	decodeStr, _ := base64.URLEncoding.DecodeString(encodedStr)
	fmt.Println(string(decodeStr)) // ab
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • xmind2022下載非試用超詳細(xì)圖文教程

    xmind2022下載非試用超詳細(xì)圖文教程

    這篇文章主要介紹了xmind2022下載非試用(超詳細(xì) 圖文預(yù)警),本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • 通過Cursor使用chatgpt-4的ai輔助編程工具的方法

    通過Cursor使用chatgpt-4的ai輔助編程工具的方法

    cursor是一款與openai合作的,使用gpt-4的一款編程工具,它可以讓你通過gpt-4進(jìn)行輔助編程,以此提高效率,這篇文章主要介紹了Cursor一個(gè)使用chatgpt-4的ai輔助編程工具,需要的朋友可以參考下
    2023-05-05
  • DeepSeek本機(jī)部署詳細(xì)步驟(基于Ollama和Docker管理)

    DeepSeek本機(jī)部署詳細(xì)步驟(基于Ollama和Docker管理)

    這篇文章主要介紹了如何利用ollama和docker在本機(jī)部署DeepSeek大語言模型,提供了一種高效、便捷且穩(wěn)定的部署方式,步驟包括硬件和軟件安裝、模型獲取、容器創(chuàng)建和啟動(dòng)等,通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2025-02-02
  • Quoted-printable 編碼介紹、Quoted-printable編碼解碼轉(zhuǎn)換方法

    Quoted-printable 編碼介紹、Quoted-printable編碼解碼轉(zhuǎn)換方法

    這篇文章主要介紹了Quoted-printable 編碼介紹、Quoted-printable編碼解碼轉(zhuǎn)換方法,需要的朋友可以參考下
    2016-06-06
  • Visual?Studio中文注釋亂碼兩種解決方案

    Visual?Studio中文注釋亂碼兩種解決方案

    這篇文章主要給大家介紹了關(guān)于Visual?Studio中文注釋亂碼兩種解決方案,如果在Visual Studio Code中注釋出現(xiàn)亂碼,可能是因?yàn)槲募幋a格式不正確,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • MyBatisCodeHelper-Pro插件破解版詳細(xì)教程[2.8.2]

    MyBatisCodeHelper-Pro插件破解版詳細(xì)教程[2.8.2]

    MyBatisCodeHelper-Pro是IDEA下的一個(gè)插件,功能類似mybatis plugin。這篇文章給大家介紹MyBatisCodeHelper-Pro插件破解版[2.8.2]的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2020-09-09
  • Git用戶簽名的修改取消及優(yōu)先級(jí)拓展教程

    Git用戶簽名的修改取消及優(yōu)先級(jí)拓展教程

    這篇文章主要為大家介紹了Git用戶簽名的修改取消及優(yōu)先級(jí)拓展教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • iisschlp.wsc [88,25] 屬性值無效 : progid

    iisschlp.wsc [88,25] 屬性值無效 : progid

    今天在運(yùn)行iisapp.vbs時(shí)候提示W(wǎng)indows Script Component - file://C:WINDOWSsystem32iisschlp.wsc [88,25] 屬性值無效 : progid,原來是因?yàn)榘踩O(shè)置惹的禍,以前就是因?yàn)檫@個(gè)一直沒解決
    2014-07-07
  • Intellij idea2020永久破解,親測可用?。?!

    Intellij idea2020永久破解,親測可用!??!

    隨著 IDEA 的 2020 版本的發(fā)布,新增和優(yōu)化了很多的功能,今天來講一講如何永久破解,親測可用,對(duì)idea2020永久破解 教程感興趣的朋友可以跟隨小編一起看看吧
    2020-05-05
  • 淺談vscode中task.json和launch.json的關(guān)系

    淺談vscode中task.json和launch.json的關(guān)系

    本文主要介紹了淺談vscode中task.json和launch.json的關(guān)系,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08

最新評(píng)論

类乌齐县| 饶阳县| 嵊州市| 景宁| 博乐市| 浪卡子县| 鸡西市| 克什克腾旗| 蕉岭县| 舟山市| 佳木斯市| 张家口市| 宝兴县| 宜昌市| 丰镇市| 昆明市| 方城县| 积石山| 永泰县| 清流县| 威信县| 天镇县| 宾阳县| 浑源县| 淮滨县| 尼木县| 鄂伦春自治旗| 临泽县| 香格里拉县| 顺昌县| 青神县| 称多县| 开化县| 南昌市| 丹棱县| 玉环县| 宜都市| 邵阳县| 迭部县| 周至县| 陵水|