最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Base64編碼解碼原理及C#編程實(shí)例

 更新時(shí)間:2014年10月08日 08:45:19   投稿:junjie  
這篇文章主要介紹了Base64編碼解碼原理及C#編程實(shí)例,本文講解了Base64編碼由來(lái)、Base64編碼原理、C#編程實(shí)現(xiàn),需要的朋友可以參考下

一. Base64編碼由來(lái)

為什么會(huì)有Base64編碼呢?因?yàn)橛行┚W(wǎng)絡(luò)傳送渠道并不支持所有的字節(jié),例如傳統(tǒng)的郵件只支持可見(jiàn)字符的傳送,像ASCII碼的控制字符就不能通過(guò)郵件傳送。這樣用途就受到了很大的限制,比如圖片二進(jìn)制流的每個(gè)字節(jié)不可能全部是可見(jiàn)字符,所以就傳送不了。最好的方法就是在不改變傳統(tǒng)協(xié)議的情況下,做一種擴(kuò)展方案來(lái)支持二進(jìn)制文件的傳送。把不可打印的字符也能用可打印字符來(lái)表示,問(wèn)題就解決了。Base64編碼應(yīng)運(yùn)而生,Base64就是一種基于64個(gè)可打印字符來(lái)表示二進(jìn)制數(shù)據(jù)的表示方法。

二. Base64編碼原理

看一下Base64的索引表,字符選用了"A-Z、a-z、0-9、+、/" 64個(gè)可打印字符。數(shù)值代表字符的索引,這個(gè)是標(biāo)準(zhǔn)Base64協(xié)議規(guī)定的,不能更改。64個(gè)字符用6個(gè)bit位就可以全部表示,一個(gè)字節(jié)有8個(gè)bit位,剩下兩個(gè)bit就浪費(fèi)掉了,這樣就不得不犧牲一部分空間了。這里需要弄明白的就是一個(gè)Base64字符是8個(gè)bit,但是有效部分只有右邊的6個(gè)bit,左邊兩個(gè)永遠(yuǎn)是0。

  那么怎么用6個(gè)有效bit來(lái)表示傳統(tǒng)字符的8個(gè)bit呢?8和6的最小公倍數(shù)是24,也就是說(shuō)3個(gè)傳統(tǒng)字節(jié)可以由4個(gè)Base64字符來(lái)表示,保證有效位數(shù)是一樣的,這樣就多了1/3的字節(jié)數(shù)來(lái)彌補(bǔ)Base64只有6個(gè)有效bit的不足。你也可以說(shuō)用兩個(gè)Base64字符也能表示一個(gè)傳統(tǒng)字符,但是采用最小公倍數(shù)的方案其實(shí)是最減少浪費(fèi)的。結(jié)合下邊的圖比較容易理解。Man是三個(gè)字符,一共24個(gè)有效bit,只好用4個(gè)Base64字符來(lái)湊齊24個(gè)有效位。紅框表示的是對(duì)應(yīng)的Base64,6個(gè)有效位轉(zhuǎn)化成相應(yīng)的索引值再對(duì)應(yīng)Base64字符表,查出"Man"對(duì)應(yīng)的Base64字符是"TWFU"。說(shuō)到這里有個(gè)原則不知道你發(fā)現(xiàn)了沒(méi)有,要轉(zhuǎn)換成Base64的最小單位就是三個(gè)字節(jié),對(duì)一個(gè)字符串來(lái)說(shuō)每次都是三個(gè)字節(jié)三個(gè)字節(jié)的轉(zhuǎn)換,對(duì)應(yīng)的是Base64的四個(gè)字節(jié)。這個(gè)搞清楚了其實(shí)就差不多了。

  但是轉(zhuǎn)換到最后你發(fā)現(xiàn)不夠三個(gè)字節(jié)了怎么辦呢?愿望終于實(shí)現(xiàn)了,我們可以用兩個(gè)Base64來(lái)表示一個(gè)字符或用三個(gè)Base64表示兩個(gè)字符,像下圖的A對(duì)應(yīng)的第二個(gè)Base64的二進(jìn)制位只有兩個(gè),把后邊的四個(gè)補(bǔ)0就是了。所以A對(duì)應(yīng)的Base64字符就是QQ。上邊已經(jīng)說(shuō)過(guò)了,原則是Base64字符的最小單位是四個(gè)字符一組,那這才兩個(gè)字符,后邊補(bǔ)兩個(gè)"="吧。其實(shí)不用"="也不耽誤解碼,之所以用"=",可能是考慮到多段編碼后的Base64字符串拼起來(lái)也不會(huì)引起混淆。由此可見(jiàn)Base64字符串只可能最后出現(xiàn)一個(gè)或兩個(gè)"=",中間是不可能出現(xiàn)"="的。下圖中字符"BC"的編碼過(guò)程也是一樣的。

三.編程實(shí)現(xiàn)(C#)

編碼:

復(fù)制代碼 代碼如下:

byte[] bytes=Encoding.Default.GetBytes("要轉(zhuǎn)換的字符串");
Convert.ToBase64String(bytes);

解碼:
復(fù)制代碼 代碼如下:

byte[] outputb = Convert.FromBase64String("ztKwrsTj");
string orgStr= Encoding.Default.GetString(outputb);

相關(guān)文章

  • Question:基于C#連續(xù)賦值的面試題介紹

    Question:基于C#連續(xù)賦值的面試題介紹

    本篇文章是關(guān)于C#中連續(xù)賦值的面試題介紹,需要的朋友參考下
    2013-05-05
  • 詳解C#代碼生成器實(shí)現(xiàn)原理

    詳解C#代碼生成器實(shí)現(xiàn)原理

    這篇文章主要為大家詳細(xì)介紹了C#代碼生成器實(shí)現(xiàn)原理的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • c#中值類(lèi)型和引用類(lèi)型的基礎(chǔ)教程

    c#中值類(lèi)型和引用類(lèi)型的基礎(chǔ)教程

    這篇文章主要給大家介紹了關(guān)于c#中值類(lèi)型和引用類(lèi)型的基礎(chǔ)教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • C# WinForm實(shí)現(xiàn)Win7 Aero透明效果代碼

    C# WinForm實(shí)現(xiàn)Win7 Aero透明效果代碼

    這篇文章主要介紹了C# WinForm實(shí)現(xiàn)Win7 Aero透明效果代碼,通過(guò)調(diào)用dwmapi.dll相關(guān)方法實(shí)現(xiàn),需要的朋友可以參考下
    2014-07-07
  • C#創(chuàng)建數(shù)據(jù)庫(kù)及導(dǎo)入sql腳本的方法

    C#創(chuàng)建數(shù)據(jù)庫(kù)及導(dǎo)入sql腳本的方法

    這篇文章主要介紹了C#創(chuàng)建數(shù)據(jù)庫(kù)及導(dǎo)入sql腳本的方法,涉及C#針對(duì)數(shù)據(jù)庫(kù)的創(chuàng)建、連接、導(dǎo)入等相關(guān)操作技巧,需要的朋友可以參考下
    2015-12-12
  • C# 中的 IReadOnlyDictionary 和 IReadOnlyList實(shí)例詳解

    C# 中的 IReadOnlyDictionary 和 IReadOnlyLis

    C# 中的IReadOnlyDictionary和IReadOnlyList是接口,用于表示只讀的字典和只讀的列表,這些接口提供了對(duì)集合的只讀訪(fǎng)問(wèn)權(quán)限,即不允許對(duì)集合進(jìn)行修改操作,這篇文章主要介紹了C# 中的 IReadOnlyDictionary 和 IReadOnlyList實(shí)例詳解,需要的朋友可以參考下
    2024-03-03
  • 把DLL文件打包進(jìn)EXE的操作技巧

    把DLL文件打包進(jìn)EXE的操作技巧

    用VS2005建立一個(gè)windows項(xiàng)目,取名test,之后把生成DLL文件打包進(jìn)EXE,接下來(lái)介紹詳細(xì)的操作技巧,感興趣的朋友可以了解下啊,或許對(duì)你有所幫助
    2013-02-02
  • C#泛型概念的簡(jiǎn)介與泛型的使用

    C#泛型概念的簡(jiǎn)介與泛型的使用

    今天小編就為大家分享一篇關(guān)于C#泛型概念的簡(jiǎn)介與泛型的使用,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-10-10
  • C#中 Json 序列化去掉null值的方法

    C#中 Json 序列化去掉null值的方法

    要將一個(gè)對(duì)象序列化,可是如果對(duì)象的屬性為null的時(shí)候,我們想將屬性為null的都去掉,怎么處理呢?其實(shí)方法很簡(jiǎn)單的,下面就跟隨腳本之家小編一起學(xué)習(xí)C#中 Json 序列化去掉null值的方法吧
    2017-09-09
  • DataReader、DataSet、DataAdapter和DataView使用介紹

    DataReader、DataSet、DataAdapter和DataView使用介紹

    ADO.NET提供兩個(gè)對(duì)象用于檢索關(guān)系型數(shù)據(jù)并把它存儲(chǔ)在內(nèi)存中,分別是DataSet和DataReader,本文將詳細(xì)介紹這幾個(gè)對(duì)象的應(yīng)用,有需求的朋友可以了解下
    2012-11-11

最新評(píng)論

开鲁县| 株洲市| 南华县| 开原市| 枞阳县| 溧水县| 贺兰县| 兴安县| 乐平市| 四子王旗| 万全县| 东乡族自治县| 安远县| 张掖市| 任丘市| 上饶县| 瑞昌市| 万荣县| 正镶白旗| 侯马市| 武宁县| 文安县| 古田县| 平远县| 拉孜县| 武山县| 聂拉木县| 楚雄市| 黔东| 聂荣县| 略阳县| 连城县| 丰镇市| 钟祥市| 镇远县| 古丈县| 什邡市| 柞水县| 庄浪县| 方城县| 钦州市|