一、 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編
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);
}