亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

解讀Base64編碼中為什么會有等號(=)問題

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

Base64編碼中為什么會有等號(=)

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

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

64個字符如下表所示

索引

對應(yīng)字符

索引

對應(yīng)字符

索引

對應(yīng)字符

索引

對應(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

大家可以看到這里面并沒 '=' 這個字符,這是因為 ’=‘ 其實是填充字符。

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

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

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

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

  • 1、ab對應(yīng)的ascaii編碼的二進制表示為:011000001 01100010
  • 2、由于只有兩個字節(jié),需要填充到3個字段,也就是:011000001 01100010 00000000
  • 3、拆分成四個6bit:011000 010110 001000 000000
  • 4、高位補兩個0,變成四字節(jié):00011000 00010110 00001000 00000000
  • 5、按照上表的對應(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
	// 解碼時,長度不是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é)

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

相關(guān)文章

  • Webstorm解除版本控制的場景分析

    Webstorm解除版本控制的場景分析

    這篇文章主要介紹了Webstorm解除版本控制的場景分析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Selenium IDE安裝及使用

    Selenium IDE安裝及使用

    本文主要介紹了Selenium IDE安裝及使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • hadoop遷移數(shù)據(jù)應(yīng)用實例詳解

    hadoop遷移數(shù)據(jù)應(yīng)用實例詳解

    這篇文章主要介紹了hadoop遷移數(shù)據(jù)應(yīng)用實例,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06
  • chatgpt成功解決Access denied 1020錯誤問題(最新推薦)

    chatgpt成功解決Access denied 1020錯誤問題(最新推薦)

    從前兩天網(wǎng)上開始一直開著的chatgpt網(wǎng)頁突然打不開了,提示1020錯誤,嘗試換了不同代理軟件或者代理地點仍然無法解決,這篇文章主要介紹了chatgpt成功解決Access denied 1020錯誤,需要的朋友可以參考下
    2023-05-05
  • 聊聊Flare應(yīng)用前后端性能優(yōu)化問題

    聊聊Flare應(yīng)用前后端性能優(yōu)化問題

    這篇文章主要介紹了Flare應(yīng)用前后端性能優(yōu)化,制作?flare?的過程,其實也是?flame?性能調(diào)優(yōu)的過程。不過在解決問題之前,我們首先得能定位問題有哪些,帶著這些問題一起通過本文學(xué)習(xí)吧
    2022-02-02
  • WebStorm 11.0.4安裝圖文教程

    WebStorm 11.0.4安裝圖文教程

    這篇文章主要為大家詳細(xì)介紹了WebStorm 11.0.4安裝圖文教程,文中安裝步驟介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • svn 常用命令集合

    svn 常用命令集合

    SVN是subversion的縮寫,是一個開放源代碼的版本控制系統(tǒng),通過采用分支管理系統(tǒng)的高效管理,簡而言之就是用于多個人共同開發(fā)同一個項目,實現(xiàn)共享資源,實現(xiàn)最終集中式的管理
    2020-07-07
  • 國外開發(fā)者談為何放棄PHP而改用Python

    國外開發(fā)者談為何放棄PHP而改用Python

    本文作者作為一名從事PHP開發(fā)11年的資深開發(fā)者,卻放棄了PHP而改用Python。
    2009-09-09
  • 整理的比較全的一句話后門代碼(方面大家查找后門)

    整理的比較全的一句話后門代碼(方面大家查找后門)

    整理的比較全的一句話后門代碼(方面大家查找后門),很多情況下也會有一些特殊字符的表示,原理一樣。
    2010-09-09
  • thymeleaf實現(xiàn)th:each雙重多重嵌套功能

    thymeleaf實現(xiàn)th:each雙重多重嵌套功能

    今天給大家分享一個使用 thymeleaf 實現(xiàn)一個動態(tài)加載一二級文章分類的功能,本文通過代碼講解的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友參考下吧
    2019-11-11

最新評論