C# Base64編碼
更新時(shí)間:2009年06月27日 21:31:05 作者:
Base64編碼的思想是是采用64個(gè)基本的ASCII碼字符對(duì)數(shù)據(jù)進(jìn)行重新編碼。它將需要編碼的數(shù)據(jù)拆分成字節(jié)數(shù)組。
一. Base64的編碼規(guī)則
Base64編碼的思想是是采用64個(gè)基本的ASCII碼字符對(duì)數(shù)據(jù)進(jìn)行重新編碼。它將需要編碼的數(shù)據(jù)拆分成字節(jié)數(shù)組。以3個(gè)字節(jié)為一組。按順序排列24 位數(shù)據(jù),再把這24位數(shù)據(jù)分成4組,即每組6位。再在每組的的最高位前補(bǔ)兩個(gè)0湊足一個(gè)字節(jié)。這樣就把一個(gè)3字節(jié)為一組的數(shù)據(jù)重新編碼成了4個(gè)字節(jié)。當(dāng)所要編碼的數(shù)據(jù)的字節(jié)數(shù)不是3的整倍數(shù),也就是說(shuō)在分組時(shí)最后一組不夠3個(gè)字節(jié)。這時(shí)在最后一組填充1到2個(gè)0字節(jié)。并在最后編碼完成后在結(jié)尾添加1到2個(gè) “=”。
例:將對(duì)ABC進(jìn)行BASE64編碼:
1、首先取ABC對(duì)應(yīng)的ASCII碼值。A(65)B(66)C(67);
2、再取二進(jìn)制值A(chǔ)(01000001)B(01000010)C(01000011);
3、然后把這三個(gè)字節(jié)的二進(jìn)制碼接起來(lái)(010000010100001001000011);
4、 再以6位為單位分成4個(gè)數(shù)據(jù)塊,并在最高位填充兩個(gè)0后形成4個(gè)字節(jié)的編碼后的值,(00010000)(00010100)(00001001)(00000011),其中藍(lán)色部分為真實(shí)數(shù)據(jù);
5、再把這四個(gè)字節(jié)數(shù)據(jù)轉(zhuǎn)化成10進(jìn)制數(shù)得(16)(20)(9)(3);
6、最后根據(jù)BASE64給出的64個(gè)基本字符表,查出對(duì)應(yīng)的ASCII碼字符(Q)(U)(J)(D),這里的值實(shí)際就是數(shù)據(jù)在字符表中的索引。
注:BASE64字符表:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
二.解碼規(guī)則
解碼過(guò)程就是把4個(gè)字節(jié)再還原成3個(gè)字節(jié)再根據(jù)不同的數(shù)據(jù)形式把字節(jié)數(shù)組重新整理成數(shù)據(jù)。
三. C#中的實(shí)現(xiàn)
byte[] bytes = Encoding.Default.GetBytes("helloworld");
string str = Convert.ToBase64String(bytes);
Console.WriteLine(str);
Console.ReadLine();
//base 64 decode
bytes = Convert.FromBase64String(str);
Console.WriteLine(Encoding.Default.GetString(bytes));
Console.ReadLine();
Base64編碼的思想是是采用64個(gè)基本的ASCII碼字符對(duì)數(shù)據(jù)進(jìn)行重新編碼。它將需要編碼的數(shù)據(jù)拆分成字節(jié)數(shù)組。以3個(gè)字節(jié)為一組。按順序排列24 位數(shù)據(jù),再把這24位數(shù)據(jù)分成4組,即每組6位。再在每組的的最高位前補(bǔ)兩個(gè)0湊足一個(gè)字節(jié)。這樣就把一個(gè)3字節(jié)為一組的數(shù)據(jù)重新編碼成了4個(gè)字節(jié)。當(dāng)所要編碼的數(shù)據(jù)的字節(jié)數(shù)不是3的整倍數(shù),也就是說(shuō)在分組時(shí)最后一組不夠3個(gè)字節(jié)。這時(shí)在最后一組填充1到2個(gè)0字節(jié)。并在最后編碼完成后在結(jié)尾添加1到2個(gè) “=”。
例:將對(duì)ABC進(jìn)行BASE64編碼:
1、首先取ABC對(duì)應(yīng)的ASCII碼值。A(65)B(66)C(67);
2、再取二進(jìn)制值A(chǔ)(01000001)B(01000010)C(01000011);
3、然后把這三個(gè)字節(jié)的二進(jìn)制碼接起來(lái)(010000010100001001000011);
4、 再以6位為單位分成4個(gè)數(shù)據(jù)塊,并在最高位填充兩個(gè)0后形成4個(gè)字節(jié)的編碼后的值,(00010000)(00010100)(00001001)(00000011),其中藍(lán)色部分為真實(shí)數(shù)據(jù);
5、再把這四個(gè)字節(jié)數(shù)據(jù)轉(zhuǎn)化成10進(jìn)制數(shù)得(16)(20)(9)(3);
6、最后根據(jù)BASE64給出的64個(gè)基本字符表,查出對(duì)應(yīng)的ASCII碼字符(Q)(U)(J)(D),這里的值實(shí)際就是數(shù)據(jù)在字符表中的索引。
注:BASE64字符表:ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
二.解碼規(guī)則
解碼過(guò)程就是把4個(gè)字節(jié)再還原成3個(gè)字節(jié)再根據(jù)不同的數(shù)據(jù)形式把字節(jié)數(shù)組重新整理成數(shù)據(jù)。
三. C#中的實(shí)現(xiàn)
復(fù)制代碼 代碼如下:
byte[] bytes = Encoding.Default.GetBytes("helloworld");
string str = Convert.ToBase64String(bytes);
Console.WriteLine(str);
Console.ReadLine();
//base 64 decode
bytes = Convert.FromBase64String(str);
Console.WriteLine(Encoding.Default.GetString(bytes));
Console.ReadLine();
您可能感興趣的文章:
- c# Base64編碼和圖片的互相轉(zhuǎn)換代碼
- asp.C#實(shí)現(xiàn)圖片文件與base64string編碼解碼
- C# Base64編碼函數(shù)
- C#解碼base64編碼二進(jìn)制數(shù)據(jù)的方法
- C#對(duì)二進(jìn)制數(shù)據(jù)進(jìn)行base64編碼的方法
- Base64編碼解碼原理及C#編程實(shí)例
- C# Base 64 編碼/解碼實(shí)現(xiàn)代碼
- C#實(shí)現(xiàn)Base64處理的加密解密,編碼解碼示例
- C#實(shí)現(xiàn)字符串與圖片的Base64編碼轉(zhuǎn)換操作示例
- c#中自定義Base16編碼解碼的方法示例
相關(guān)文章
HttpWebRequest和HttpWebResponse用法小結(jié)
在每個(gè)系統(tǒng)出寫(xiě)入報(bào)告錯(cuò)誤代碼(找個(gè)合理的理由,比如系統(tǒng)免費(fèi)升級(jí)) -> 自家服務(wù)器接收并處理錯(cuò)誤報(bào)告 -> 反饋用戶(解決掉BUG就行,不要太聲揚(yáng))2011-09-09
.NET?6中為record類(lèi)型自定義Equals方法
這篇文章主要介紹了.NET?6中為record類(lèi)型自定義Equals方法,record類(lèi)型,這是一種新引用類(lèi)型,而不是類(lèi)或結(jié)構(gòu)。record與類(lèi)不同,區(qū)別在于record類(lèi)型使用基于值的相等性,下文小編將介紹更多詳細(xì)資料,需要的朋友可以參考一下2022-03-03
asp.net web大文件上傳帶進(jìn)度條實(shí)例代碼
web 大文件上傳 帶進(jìn)度條2008-10-10
MVC+EasyUI+三層新聞網(wǎng)站建立 分頁(yè)查詢數(shù)據(jù)功能(七)
這篇文章主要為大家詳細(xì)介紹了MVC+EasyUI+三層新聞網(wǎng)站建立的第七篇,教大家如何分頁(yè)查詢出數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
ASP.NET漢字轉(zhuǎn)拼音 - 輸入漢字獲取其拼音的具體實(shí)現(xiàn)
這篇文章主要介紹了ASP.NET漢字轉(zhuǎn)拼音 - 輸入漢字獲取其拼音的具體實(shí)現(xiàn),需要的朋友可以參考下2014-02-02
為HttpClient添加默認(rèn)請(qǐng)求報(bào)頭的四種解決方案
這篇文章主要給大家介紹了關(guān)于為HttpClient添加默認(rèn)請(qǐng)求報(bào)頭的四種解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用HttpClient具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
一個(gè)ASP.NET中使用的MessageBox類(lèi)
一個(gè)ASP.NET中使用的MessageBox類(lèi)...2006-09-09

