一、 BASE64编码
把byte[]中的元素当做无符号八位整数转换成只含有64个基本字符的字符串,这些基本字符是:
l 大写的A-Z
l 小写的a-z
l 数字0-9
l '+' 和 '/'
l 空白字符(包括空白、tab,换行)
l ‘=’,为填充字符,结尾处可以填充0-2个填充字符
这64个字符构成BASE64的字符集。
Base64是将原文按照每 3 个字节一组分开,这个 3 字节组中的每一组将被按照位分解成 4 个部分,每个部分 6 个位,在这 4 个部分的每个部分高位加上 2 个 0构成一个新的 4 字节组,新的字节组中,每个字节只有 6 位,能表示64个值。
在原文在转换为BASE64编码时,试是以3个字节为一组转换成4字节一组的BASE64编码。如果原文不是三字节的倍数,可能多出一个字节和两个字节,分别会被转为2字节和3字节的BASE64编码,这时编码系统应该在形成的BASE64编码最后添加上填充符”=”,保证BASE64编码长度是4的倍数。所以在BASE64编码后添加的填充符”=”可能为0-2个。
BASE64编码对照表如下:
|
Value |
|
Encoding |
|
Value |
|
Encoding |
|
Value |
|
Encoding |
|
Value |
|
Encoding |
|
0 |
|
A |
|
16 |
|
Q |
|
32 |
|
g |
|
48 |
|
w |
|
1 |
|
B |
|
17 |
|
R |
|
33 |
|
h |
|
49 |
|
x |
|
2 |
|
C |
|
18 |
|
S |
|
34 |
|
i |
|
50 |
|
y |
|
3 |
|
D |
|
19 |
|
T |
|
35 |
|
j |
|
51 |
|
z |
|
4 |
|
E |
|
20 |
|
U |
|
36 |
|
k |
|
52 |
|
0 |
|
5 |
|
F |
|
21 |
|
V |
|
37 |
|
l |
|
53 |
|
1 |
|
6 |
|
G |
|
22 |
|
W |
|
38 |
|
m |
|
54 |
|
2 |
|
7 |
|
H |
|
23 |
|
X |
|
39 |
|
n |
|
55 |
|
3 |
|
8 |
|
I |
|
24 |
|
Y |
|
40 |
|
o |
|
56 |
|
4 |
|
9 |
|
J |
|
25 |
|
Z |
|
41 |
|
p |
|
57 |
|
5 |
|
10 |
|
K |
|
26 |
|
a |
|
42 |
|
q |
|
58 |
|
6 |
|
11 |
|
L |
|
27 |
|
b |
|
43 |
|
r |
|
59 |
|
7 |
|
12 |
|
M |
|
28 |
|
c |
|
44 |
|
s |
|
60 |
|
8 |
|
13 |
|
N |
|
29 |
|
d |
|
45 |
|
t |
|
61 |
|
9 |
|
14 |
|
O |
|
30 |
|
e |
|
46 |
|
u |
|
62 |
|
空白 |
|
15 |
|
P |
|
31 |
|
f |
|
47 |
|
v |
|
63 |
|
‘=’ |
Byte[]和BASE64之间的转换纯粹就是表现形式的一种转换,它们之间有直接的对应关系,不涉及到使用何种代码页的问题,BASE64表达的也是字节流。
二、 Byte[]和BASE64之间的转换操作
static void Main(string[] args)
{
string factString = "中华人民共和国";
byte[] myByte;
string Base64Str;
//先把字符串按照utf-8的编码转换成byte[]
Encoding myEncoding = Encoding.GetEncoding("utf-8");
//myByte中获得这样的字节数组:228,184,173,229,141,142,228,186,186,230,176,145,229,133,177,229,146,140,229,155,189
myByte = myEncoding.GetBytes(factString);
//把byte[]转成base64编码,这个例子形成的base64编码为:"5Lit5Y2O5Lq65rCR5YWx5ZKM5Zu9"
Base64Str = Convert.ToBase64String(myByte);
//再从base64编码转成byte[],又恢复为字节数组:228,184,173,229,141,142,228,186,186,230,176,145,229,133,177,229,146,140,229,155,189
myByte = Convert.FromBase64String(Base64Str);
//用同一个Encoding对象把byte[]转成字符串:"中华人民共和国"
factString = myEncoding.GetString(myByte);
Console.WriteLine(factString);
Base64编码原理及应用
930

被折叠的 条评论
为什么被折叠?



