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