.net的加密算法,返回的都是byte[] 類型,在存貯起來讓人非常頭疼,最簡單的方法就是把byte[]轉換成string來存貯,當然如果數據量大的話,另當別論。
所以我就把byte[]轉換成string的方法做一個簡單的積累與分析。目前有3種我覺得比較簡單的方案來進行轉化。
1.Convert.ToBase64String與 Convert.FromBase64String
此方法簡單實用。轉換成的string包含:26個英文字母的大小寫、+、/、0~9的數字,總共64個字符。一般會在結尾出現“=”。分析其原因很簡單。
原理:用64個字符來描述6bit的二進制。
方式:把byte數據連在一起,以6bit為單位進行分組,使用64個字符描述6bit數據,如果分組不足6bit,使用“=”補全。
?
2.自己寫代碼,使用16進制字符0~9、A~F來描述數據。
原理:使用16個字符來描述4bit的二進制。也就是說,一個byte要使用兩個16進制字符來進行描述。
方式:對每一byte的前半部分與后半部分分別用字符來描述。
此方法需要自己手動進行書寫,代碼相當簡單。可以Crtl+c Ctrl+v拿來就用。
public static string ByteToString(byte[] bytes)
{
StringBuilder strBuilder = new StringBuilder();
foreach (byte bt in bytes)
{
strBuilder.AppendFormat("{0:X2}", bt);
}
return strBuilder.ToString();
}
public static byte[] StringToByte(string str)
{
byte[] bytes = new byte[str.Length / 2];
for (int i = 0; i < str.Length / 2; i++)
{
int btvalue = Convert.ToInt32(str.Substring(i * 2, 2), 16);
bytes[i] = (byte)btvalue;
}
return bytes;
}
3.使用Encoding的編碼自動轉化Encoding.GetEncoding("編碼格式").GetString()和?? Encoding.GetEncoding("編碼格式").GetBytes()
原理:使用編輯規則強行轉換。
方式:使用編輯自身的編碼方式進行轉換,轉換出來的byte數據或者是string會出現各種奇怪或者是不可見的字符,存貯起來非常不方便。
?
?
總結:
推薦使用第一種方法來進行string的轉化,但如果對格式要求時,如自定義機器語言中,不允許出現“+”“/”這種字符時,考慮會用第二種方法。
如果只是轉換成byte數據或者是轉換成string進行內存操作時,使用第三種方式是種不錯的選擇。