ASCII碼 和 Base64編碼

ASCII編碼

簡介

ASCII碼(American Standard Code for Information Interchange, 美國信息互換標準代碼) 是基於拉丁字母的一套電腦編碼系統, 是現今最通用的單字節編碼系統.

對應關係

我們知道在java中, 一個char可以認爲是一個int值, 舉例:
'A' == 65
這裏的對應關係就是基於ASCII編碼, 其中A-Z, a-z, 0-9的對應關係如下:

十進制 對應字符 十進制 對應字符 十進制 對應字符
65 A 97 a 48 0
66 B 98 b 49 1
67 C 99 c 50 2
68 D 100 d 51 3
69 E 101 e 52 4
70 F 102 f 53 5
71 G 103 g 54 6
72 H 104 h 55 7
73 I 105 i 56 8
74 J 106 j 57 9
75 K 107 k
76 L 108 l
77 M 109 m
78 N 110 n
79 O 111 o
80 P 112 p
81 Q 113 q
82 R 114 r
83 S 115 s
84 T 116 t
85 U 117 u
86 V 118 v
87 W 119 w
88 X 120 x
89 Y 121 y
90 Z 122 z

Base64編碼

意義

現有的字符集非常多, 常用的有 UTF-8 / GBK 等, 這裏面的某些字節在某些傳輸渠道中不支持, 比如郵件傳輸就不支持上面ASCII碼中的控制字符, Base64的創建就是爲了解決此問題.

對應關係

Base64內的64是指64個字符, 分別是 A-Z, a-z, 0-9, +, /
它們與十進制的對應關係如下:

數值 字符 數值 字符 數值 字符
0 A 26 a 52 0
1 B 27 b 53 1
2 C 28 c 54 2
3 D 29 d 55 3
4 E 30 e 56 4
5 F 31 f 57 5
6 G 32 g 58 6
7 H 33 h 59 7
8 I 34 i 60 8
9 J 35 j 61 9
10 K 36 k
11 L 37 l 62 +
12 M 38 m 63 /
13 N 39 n
14 O 40 o
15 P 41 p
16 Q 42 q
17 R 43 r
18 S 44 s
19 T 45 t
20 U 46 u
21 V 47 v
22 W 48 w
23 X 49 x
24 Y 50 y
25 Z 51 z

如何對ASCII碼進行Base64編解碼

Base64有64個字符, 2^6 = 64, 所以每個Base64編碼字符可以用一個6位的二進制來表示.
這樣的話如果有3個字節的二進制, 可以用4位Base64字符表示.

編碼流程如下:

  1. ASCII碼字符串根據ASCII碼對照表轉換爲二進制數值;
  2. 把二進制數值按每6位進行劃分;
  3. 然後6位二進制轉化爲十進制根據對照表找到Base64編碼字符.

舉例

3位ASCII轉4位Bsae64

那如果待編碼字符串的長度不是3的倍數呢? 這樣的話就ASCII轉化的二進制數串不能整除於6了, 也就不能編碼爲Base64. 這樣的情況爲了可以整除6編譯出完整的字節數, 就需要用0補位. 如果有連續6位都是0的話, 就用=來表示.

舉例

補位後編碼

相信看完這兩個例子, 我們就對Base64的編碼過程有一個比較清晰的認識了.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章