Byte[]和BASE64之间的转换

一、Base64编码
把 byte[] 中的元素当做无符号八位整数转换成只含有 64 个基本字符的字符串,这些基本字符是:
l         大写的 A-Z
l         小写的 a-z
l         数字 0-9
l         '+' 和 '/'
 
这 64 个字符构成 BASE64 的字符集。‘=’,为填充字符,结尾处可以填充0-2个填充字符
 
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 表达的也是字节流。
实际应用中,dotnet提供的两个主要的BASE64方法Convert.ToBase64String 和 Convert.FromBase64String,并不是把Byte[]直接转成相应的BASE64的字节流,而是转换成unicode的等价字符串,就是base64的值对应的字符在unicode的等价字符。
如果要把BASE64的等价字符串转成Byte[],还是需要指定一个代码页然后按照指定的编码转成Byte[]。

二、 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编码的unicode等价字符串为:"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);
}

 

转载于:https://www.cnblogs.com/casystem/articles/1632050.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值