您好,登錄后才能下訂單哦!
這篇文章主要介紹了Base64編碼中為什么會有等號的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Base64編碼中為什么會有等號文章都會有所收獲,下面我們一起來看看吧。
如果對字符串"ab"進行Base64編碼,得到的結果將是:YWI=,結果中為什么會出現=呢,這就需要了解一下base64編碼背后的原理。
Base64是一種便于網絡傳輸的字節碼編碼方式,之所以叫Base64是由于它的編碼結果是由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=的。
1、ab對應的ascaii編碼的二進制表示為:011000001 01100010
2、由于只有兩個字節,需要填充到3個字段,也就是:011000001 01100010 00000000
3、拆分成四個6bit:011000 010110 001000 000000
4、高位補兩個0,變成四字節:00011000 00010110 00001000 00000000
5、按照上表的對應關系:24-Y 22-W 8-I 填充-=, 也即是YWI=。
需要注意填充的0是要被轉化成=,而不是上表中的A。
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) % 4 if i != 0 { encodedStr += strings.Repeat("=", 4-i) } // base64解碼 decodeStr, _ := base64.URLEncoding.DecodeString(encodedStr) fmt.Println(string(decodeStr)) // ab }
關于“Base64編碼中為什么會有等號”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Base64編碼中為什么會有等號”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。