[转]Base64

/// 服务器端Base64编码
        
/// </summary>
        
/// <param name="data"></param>
        
/// <returns></returns>
        public string base64Encode(string data)
        
{
            
try
            
{
                
byte[] encData_byte = new byte[data.Length];
                encData_byte 
= System.Text.Encoding.UTF8.GetBytes(data);
                
string encodedData = Convert.ToBase64String(encData_byte);
                
return encodedData;
            }

            
catch (Exception e)
            
{
                
throw new Exception("Error in base64Encode" + e.Message);
            }

        }

        
/// <summary>
        
/// 服务器端Base64解码
        
/// </summary>
        
/// <param name="data"></param>
        
/// <returns></returns>

        public string base64Decode(string data)
        
{
            
try
            
{
                System.Text.UTF8Encoding encoder 
= new System.Text.UTF8Encoding();
                System.Text.Decoder utf8Decode 
= encoder.GetDecoder();
                
byte[] todecode_byte = Convert.FromBase64String(data);
                
int charCount = utf8Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);
                
char[] decoded_char = new char[charCount];
                utf8Decode.GetChars(todecode_byte, 
0, todecode_byte.Length, decoded_char, 0);
                
string result = new String(decoded_char);
                
return result;
            }

            
catch (Exception e)
            
{
                
throw new Exception("Error in base64Decode" + e.Message);

///

 //这里是进行二进制到Base64的转换
        public string ByteToBase64(byte[] ByteArry,int Start,int Length)
        {
            string Result;
            Result=System.Convert.ToBase64String(ByteArry,Start,Length);
            return Result;
        }

'/

把 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);
}


            }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值