亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Base64編碼解碼原理及C#編程實例

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

一. Base64編碼由來

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

二. Base64編碼原理

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

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

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

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

編碼:

復制代碼 代碼如下:

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

解碼:
復制代碼 代碼如下:

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

相關(guān)文章

  • C#筆試題之同線程Lock語句遞歸不會死鎖

    C#筆試題之同線程Lock語句遞歸不會死鎖

    這篇文章主要介紹了C$ 筆試題之同線程Lock語句遞歸不會死鎖,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-02-02
  • 詳解C# 不能用于文件名的字符

    詳解C# 不能用于文件名的字符

    在 Windows 有一些字符是不能作為文件名,嘗試重命名一個文件,輸入/ 就可以看到windows 提示的不能作為文件名的字符,那么具體是包括哪些符號不能作為文件名呢?下面小編給大家介紹下
    2018-02-02
  • C#中的char、string和StringBuilder的使用詳解

    C#中的char、string和StringBuilder的使用詳解

    這篇文章主要介紹了C#中的char、string和StringBuilder的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • C#訪問應(yīng)用程序配置文件的方法

    C#訪問應(yīng)用程序配置文件的方法

    C#訪問應(yīng)用程序配置文件的方法,需要的朋友可以參考一下
    2013-03-03
  • unity 鼠標懸停事件操作

    unity 鼠標懸停事件操作

    這篇文章主要介紹了unity 鼠標懸停事件操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • C#中常使用進度條的代碼

    C#中常使用進度條的代碼

    C#中常使用進度條的代碼...
    2007-03-03
  • 利用C#實現(xiàn)最基本的小說爬蟲示例代碼

    利用C#實現(xiàn)最基本的小說爬蟲示例代碼

    最近在學習c#,碰巧遇到個小說站不錯,就索性當個練習,所以這篇文章主要給大家介紹了關(guān)于利用C#實現(xiàn)最基本的小說爬蟲的相關(guān)資料,文中給出了詳細的示例代碼供大家參考學習,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-10-10
  • C#的回調(diào)機制淺析

    C#的回調(diào)機制淺析

    這篇文章主要介紹了C#的回調(diào)機制,較為通俗的分析了回調(diào)機制的本質(zhì)與使用時的注意事項,對于C#的學習有一定的參考借鑒價值,需要的朋友可以參考下
    2014-11-11
  • 使用aspose.word 第三方的插件實現(xiàn)導出word

    使用aspose.word 第三方的插件實現(xiàn)導出word

    本文給大家分享的是一個使用使用aspose.word 第三方的插件實現(xiàn)導出word的實例,十分的實用,有需要的小伙伴可以參考下。
    2015-06-06
  • C# 爬蟲簡單教程

    C# 爬蟲簡單教程

    這篇文章主要介紹了C# 爬蟲的簡單教程,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-12-12

最新評論