Atitit.Base64編碼原理與實現設計,atitit.base64編碼

來源:互聯網
上載者:User

Atitit.Base64編碼原理與實現設計,atitit.base64編碼

Atitit.Base64編碼原理與實現設計

 

 

1. Base64編碼1

1.1. 為什麼要用自己的base64編碼方案1

2. Base64編碼由來1

3. Base64編碼原理1

3.1. 具體來說,轉換方式可以分為四步:2

3.2. 注意2

3.3. Padding3

4. URL安全的Base64編碼3

 

1.  Base64編碼1.1.  為什麼要用自己的base64編碼方案

防止apache codec  jdk的jar衝突。

 

2.  Base64編碼由來

Base64最早是用來解決電子郵件的傳輸問題。

傳統的電子郵件是1982年定下技術規範的,詳見rfc0822。該規範的一個重要特點,就是規定電子郵件只能使用ASCII可列印字元。這就導致非英語字元或二進位檔案(比片)不同通過電子郵件進行傳輸了。

作者::  ★(attilax)>>>   綽號:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿爾 拉帕努伊 ) 漢字名:艾龍,  EMAIL:1466519819@qq.com

轉載請註明來源: http://www.cnblogs.com/attilax/

 

 

3.  Base64編碼原理

簡單來說, Base64編碼就是從ASCII碼中選出64個字元----大寫字母A-Z、小寫字母a-z、數字0-9、符號"+"、"/"(再加上作為填充字元的"=",實際上是65個字元),作為一個基底字元集。然後,其他所有符號都轉換成這個字元集中的字元。

 

3.1.  具體來說,轉換方式可以分為四步:

1. 將每三個位元組分成一組,一共24個二進位位:3*8=24

2. 將這24個二進位位分成4組,每組有6個二進位位:24/4=6

3. 在每組前加兩00,擴充成32個二進位位,即4個位元組:4*(6+2)=32

4. 

根據下面的編碼錶,得到擴充後每個位元組的對應符號,就是Base64的編碼值

5. 

Value Encoding  Value Encoding  Value Encoding  Value Encoding

    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         (pad) =

   15 P            32 g            49 x

   16 Q            33 h            50 y

6. 

 

3.2.  注意

1. 因為轉換後的每個字元的最高兩位都是0,所以實際有效位元是6位,也就是26=64個字元就可以覆蓋所有的編碼。

2. 如果剩下的字元不足3個位元組,則用0填充,輸出字元使用"=",因此編碼後輸出的文本末尾可能會出現1或2個"="。

3. 因為Base64將3個位元組轉化成4個位元組,因此Base64編碼後的文本,會比原文本大出三分之一左右。

 

3.3.  Padding

Base64是三個位元組(Bytes)作為一組(24-bit block)的編碼轉換,如果位元組數不是三的倍數,那麼就會出最後一組只有一個或者兩個位元組的情況,按下面的規則處理:

1. 一個位元組的情況:將這一個位元組的8個二進位位,按照每組6個二進位位轉成二組,最後一組除了前面加二個0以外,後面再加4個0。這樣得到一個二位的Base64編碼,再在末尾補上兩個"="號。

2. 二個位元組的情況:將這二個位元組的一共16個二進位位,按每組6個二進位位轉成三組,最後一組除了前面加兩個0以外,後面也要加兩個0。這樣得到一個三位的Base64編碼,再在末尾補上一個"="號。

 

參考base64架構圖片

 

4.  URL安全的Base64編碼

由於‘+’,‘/’兩個字元在URL中有特殊含義,將Base64編碼後的資料在通過URL傳輸時需要通過URL編碼進行轉義,但是這樣子會導致URL無意義的變長,而且多了一個URL編解碼步驟。為了避免這個問題,出現了一種用於URL的改進Base64編碼變種,它其實就是簡單的把標準Base64中的'+'和'/'分別改成了'-'和'_'。對於填充字元'=',有些變種是把它直接去掉,有些則是把它替換成'.'。

 

Base64編碼學習筆記 - 簡書.html

 

聯繫我們

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