BASE64編碼原理與Golang代碼調用

來源:互聯網
上載者:User

一.概念簡介

Base64是一種基於64個可列印字元來表示位元據的表示方法。由於2^6=64,所以每6個位元為一個單元,對應某個可列印字元。3個位元組有24個位元,對應於4個Base64單元,即3個位元組可由4個可列印字元來表示。它可用來作為電子郵件的傳輸編碼。在Base64中的可列印字元包括字母A-Z、a-z、數字0-9,這樣共有62個字元,此外兩個可列印符號在不同的系統中而不同。

Base64常用於在通常處理文本資料的場合,表示、傳輸、儲存一些位元據

二.代碼調用

在Golang中提供了程式碼程式庫可以供我們直接調用,用於實現Base64的編碼與解碼,其提供了對兩種格式的資料進行編碼(與解碼)

const encodeStd = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"const encodeURL = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"

來自golang源碼base64.go

1.標準資料(encodeStd)
    msg := "Mac"    //編碼    base64EncodedString := base64.StdEncoding.EncodeToString([]byte(msg))    fmt.Println("Base64編碼後:", base64EncodedString)    //解碼    base64DecodedByte, err := base64.StdEncoding.DecodeString(base64EncodedString)    if err != nil {        log.Panic(err)    }    fmt.Println("Base64解碼後的位元組數組:", base64DecodedByte)    fmt.Println("Base64解碼後:", string(base64DecodedByte))

返回列印結果

Base64編碼後: TWFjBase64解碼後的位元組數組: [77 97 99]Base64解碼後: Mac
2.URL資料(encodeURL)
msgUrl :="http://www.google.com"    base64UrlEncodedString :=base64.URLEncoding.EncodeToString([]byte(msgUrl))    fmt.Println("Base64編碼後:", base64UrlEncodedString)    base64UrlDecodedByte,err := base64.URLEncoding.DecodeString(base64UrlEncodedString)    if err !=nil {        log.Panic(err)    }    fmt.Println("Base64解碼後的位元組數組:", base64UrlDecodedByte)    fmt.Println("Base64解碼後:", string(base64UrlDecodedByte))

返回列印結果

Base64編碼後: aHR0cDovL3d3dy5nb29nbGUuY29tBase64解碼後的位元組數組: [104 116 116 112 58 47 47 119 119 119 46 103 111 111 103 108 101 46 99 111 109]Base64解碼後: http://www.google.com

三.編碼原理

1.將每個字元轉成ASCII編碼(10進位)
fmt.Println([]byte(msg)) //[77 97 99]
2.將10進位編碼轉成2進位編碼
fmt.Printf("%b",[]byte(msg)) //[1001101 1100001 1100011] 

補齊8位為:

[01001101 01100001 01100011] 
3.將2進位編碼按照6位一組進行平分
010011 010110 000101 100011
4.轉成10進位數

010011 ==> 1x2^0 + 1x2^1 + 0 + 0 + 1x2^4 = 19

010110 ==> 0 + 1x2^1 + 1x2^2 + 0 + 1x2^4 = 22

000101 ==> 1x2^0 + 0 + 1 x 2^2 + 0 + 0 + 0 = 5

100011 ==> 1x2^0 + 1x2^1 + 0 + 0 + 0 + 1x2^5 = 35

5.將十進位數作為索引,從Base64編碼錶中尋找字元

19 對應 T22 對應 W5  對應 F35 對應 j (注意是小寫)

注意

  • 若文本為3個字元,則剛好編碼為4個字元長度(3 8 = 4 6)
  • 若文本為2個字元,則編碼為3個字元,尾部用一個"="補齊
  • 若文本為1個字元,則編碼為2個字元,尾部用兩個"="補齊
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.