程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Atitit.Base64編碼原理與實現設計,atitit.base64編碼

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

編輯:JAVA綜合教程

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:[email protected]

轉載請注明來源: 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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved