base64編碼解碼原理

來源:互聯網
上載者:User

標籤:port   replace   個數   lin   ora   儲存   傳輸   進位轉化   語言   

電腦只能處理數字,所以要處理任何文本,只能先將文本轉化為數字才行。

Bit(bit)(b) 位或位元,是電腦啟動並執行基礎,屬於二進位的範疇。資料轉送大多是以【位】為單位,一個位即代表一個0或者1(即二進位),每8個位組成一個位元組。

Byte(B)位元組,是電腦中檔案大小的基本計量單位。資料存放區就是以位元組為單位。1B = 8b。所以一個位元組最大能表述的數字是255【11111111】

編碼:

ASCII編碼:1個位元組,所以只能處理英文數字和一些符號。

UNICODE編碼:通常是2個位元組,它把所有語言都統一到一套編碼中,因此解決了亂碼問題,但是隨之而來的是,儲存空間的浪費。如文中大量的英文,每個字元都需要2個位元組的儲存空間

UTF8編碼:UTF8結合了二者的優缺點,它是可變長編碼方式。它把一個UNICODE字元根據不同的數字大小,編碼成1--6個位元組,常用英文字母為1個位元組,漢字通常3個位元組。

在電腦記憶體中,通常採用Unicode編碼,在需要儲存到硬碟或需要傳輸的時候,就轉化為utf8。

python中,提供了ord()函數擷取字元的整數表示。

 BASE64編碼由64個字元組成,編碼後的字元由表中字元組合而成,具體流程如下:

  1)base64編碼都是按照字串長度分組,以每3個8位位元組為一組,不足3個一組的,補0,編碼完成後補=

  2)擷取每組的每個字元的ASCII碼

  3)將ASCII碼轉化為8位的二進位,即每組為3*8=24位的長度

  4)將24位劃分為4個6位的位元組,並在每個6位位元組前補2個0,重新組成8位的位元組

  5)將新組成的8位的位元組轉化為十進位,尋找對應的base64編碼錶。

  用代碼錶示如下(以下只支援英文直接轉化):

  import string

  base64_char = string.ascii_uppercase + string.ascii_lowercase + string.digits+‘+/‘   # base64編碼錶

  def decode(s):

    num = 0 if (3-len(s)%3)==3 else (3-len(s)%3)   # 分組後不足待補齊的個數

    new_s = ["{:0>8}".format(bin(ord(i)).replace("0b","")) for i in s]  # 將字串轉化為8為的二進位

    new_s ="".join( [new_s.append("0"*8) for x in range(num)])   # 對於不足3個分組的,補齊0

    num1 = int(new_s/6)  # 重新以6位為一組,可以分的組數量

    new_s = ["{:0>8}".format(new_s[i*6:(i+1)*6]) for i in range(num1)]  # 將新的分組補齊為8位

    new_s = [int(x,2) for x in new_s]  # 將新的二進位轉化為10進位

    result = "".join([base64_char[i] for i in new_s])+"="*num  # 對應的查編碼錶並補齊=

    print(result)

  

  對應的解碼,即將上面的函數反向執行:

  def decode(s):

    while s[-2:-1]=="=":

      s = s.replace("=","")  # 將補齊的=號去掉

    s1 = ["{:0>6}".format(bin(base64_char.index(x)).replace("0b","")) for x in s]  # 尋找編碼錶,找到對應的位置,並轉化為二進位

    s1 = "".join(s1)

    num = len(s1)//8  # 計算出分組數量

    s2 = [s1[x*8:(x+1)*8]  for x in range(num)]  # 轉化為8位一組的位元組

    s2 = [chr(int(s1[index],2)) for index in range(num)]

    result = "".join(s2)

    print(result)

    

base64編碼解碼原理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.