1. 程式人生 > >Base64編碼解碼

Base64編碼解碼

  一. Base64編碼由來

  為什麼會有Base64編碼呢?因為有些網路傳送渠道並不支援所有的位元組,例如傳統的郵件只支援可見字元的傳送,像ASCII碼的控制字元就不能通過郵件傳送。這樣用途就受到了很大的限制,比如圖片二進位制流的每個位元組不可能全部是可見字元,所以就傳送不了。最好的方法就是在不改變傳統協議的情況下,做一種擴充套件方案來支援二進位制檔案的傳送。把不可列印的字元也能用可列印字元來表示,問題就解決了。Base64編碼應運而生,Base64就是一種基於64個可列印字元來表示二進位制資料的表示方法。

  二. Base64編碼原理

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

  那麼怎麼用6個有效bit來表示傳統字元的8個bit呢?8和6的最小公倍數是24,也就是說3個傳統位元組可以由4個Base64字元來表示,保證有效位數是一樣的,這樣就多了1/3的位元組數來彌補Base64只有6個有效bit的不足。你也可以說用兩個Base64字元也能表示一個傳統字元,但是採用最小公倍數的方案其實是最減少浪費的。結合下邊的圖比較容易理解。Man是三個字元,一共24個有效bit,只好用4個Base64字元來湊齊24個有效位。紅框表示的是對應的Base64,6個有效位轉化成相應的索引值再對應Base64字元表,查出"Man"對應的Base64字元是"TWFU"。說到這裡有個原則不知道你發現了沒有,要轉換成Base64的最小單位就是三個位元組

,對一個字串來說每次都是三個位元組三個位元組的轉換,對應的是Base64的四個位元組。這個搞清楚了其實就差不多了。

         

  但是轉換到最後你發現不夠三個位元組了怎麼辦呢?願望終於實現了,我們可以用兩個Base64來表示一個字元或用三個Base64表示兩個字元,像下圖的A對應的第二個Base64的二進位制位只有兩個,把後邊的四個補0就是了。所以A對應的Base64字元就是QQ。上邊已經說過了,原則是Base64字元的最小單位是四個字元一組,那這才兩個字元,後邊補兩個"="吧。其實不用"="也不耽誤解碼,之所以用"=",可能是考慮到多段編碼後的Base64字串拼起來也不會引起混淆。由此可見Base64字串只可能最後出現一個或兩個"=",中間是不可能出現"="的。下圖中字元"BC"的編碼過程也是一樣的。

  三.程式設計實現(C#)

  編碼:

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

  解碼:

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

相關推薦

JS實現—Base64編碼解碼,帶16進制顯示

ech encode break 復制代碼 bre zab idt pts image 代碼如下: <!DOCTYPE html> <html> <head> <meta name="viewport" conte

linux下進行base64編碼解碼

image 分享 clas 技術分享 post blog div img 技術 1.編碼 2.解碼 linux下進行base64編碼解碼

Java Base64 編碼解碼方案總結

缺點 system 類別 字串 轉換 一點 text encoder bin Base64是一種能將任意Binary資料用64種字元組合成字串的方法,而這個Binary資料和字串資料彼此之間是可以互相轉換的,十分方便。在實際應用上,Base64除了能將Binary資料可視化

java 按位元組讀寫二進位制檔案(Base64編碼解碼

最近在做專案時遇到這樣一個需求:依次讀取本地資料夾裡所有檔案的內容,轉為JSON,傳送到ActiveMQ的訊息佇列, 然後從MQ的訊息佇列上獲取檔案的資訊,依次寫到本地。常見的檔案型別,比如.txt 和.png等檔案的讀寫並不難。但是,我剛才所提到的需求,如果用常規的方法去讀寫,比如按位元組讀取檔案內容

java 按字節讀寫二進制文件(Base64編碼解碼

h+ lee bean 字節數組 inpu 讀取 write bytearray 轉換工具類 最近在做項目時遇到這樣一個需求:依次讀取本地文件夾裏所有文件的內容,轉為JSON,發送到ActiveMQ的消息隊列, 然後從MQ的消息隊列上獲取文件的信息,依次寫到本地。常見的文

python2,python3中的base64編碼解碼

Base64編碼是一種“防君子不防小人”的編碼方式。廣泛應用於MIME協議,作為電子郵件的傳輸編碼,生成的編碼可逆,後一兩位可能有“=”,生成的編碼都是ascii字元。 優點:速度快,ascii字元,肉眼不可理解 缺點:編碼比較長,非常容易被破解,僅適用於加密非關鍵資訊的場

JavaScript base64編碼解碼

 ----script------   1a你 MWHkvaA=  var b = new Base64();     var eid = b.encode('1a你');     console.log(eid); &nbs

java網路圖片Base64編碼解碼

編碼 /** * 線上圖片Base64編碼 * @param link 線上圖片請求地址 * @return * @throws IOException */ public static String toBase

ASP對base64編碼解碼程式

針對郵件退信,內容進行解碼!網上收集,具體出處不詳! <form name="form1" method="post" action="">  <table width="95%" border="0" align="center" cellpadding=

base64 編碼解碼

<!doctype html> <html> <head> <meta charset='utf-8'> <meta name='viewport' content='width=device-width'

javascript base64編碼解碼(漢字正常,但檔案較大)

1.UnicodeAnsi.js //UnicodeAnsi.js檔案 //把Unicode轉成Ansi和把Ansi轉換成Unicode function UnicodeChr(){ return '00A4,00A7,00A8,00B0,00B1,00B7,00D7,

Libb64:c/c++實現的base64編碼解碼庫函式

base64編碼解碼本身也不復雜,但要自己寫,還是得花點時間,如果能找到現成的可靠的程式碼,抄來最好,節省了測試的時間。 libb64就是實現base64編碼解碼的開源庫,還提供了C++封裝,用起來也挺方便 下面是使用libb64 C++封裝介面進行ba

一個VB寫的Base64編碼/解碼程式

今天做了個Base64編碼程式,本想將二進位制檔案編碼後可以直接在論壇或Blog上釋出,而不用再擔心不能上傳附件的問題,當然了,只是針對小檔案而言,超過幾M的大檔案不在此列。 編碼解碼程式只是利用Base64編碼解碼模組新增簡單的檔名輸入輸出程式碼做出來的,很簡單

關於base64編碼解碼(Android編碼,JS解碼,案例為解決安卓端H5頁面的emoji表情顯示問題)

1、前言: Base64是網路上最常用的用於傳輸8Bit位元組程式碼的編碼方式之一,比如開發中用於傳遞引數、現代瀏覽器中的<img />標籤直接通過Base64字串來渲染圖片,以及用於郵件中等等。Base64編碼在RFC2045中定義為:Base64內容傳送

Base64編碼解碼

  一. Base64編碼由來   為什麼會有Base64編碼呢?因為有些網路傳送渠道並不支援所有的位元組,例如傳統的郵件只支援可見字元的傳送,像ASCII碼的控制字元就不能通過郵件傳送。這樣用途就受到了很大的限制,比如圖片二進位制流的每個位元組不可能全部是可見字元,所以就傳送不了。最好的方法就是在

C++利用boost實現base64編碼解碼

#include <boost/archive/iterators/base64_from_binary.hpp> #include <boost/archive/iterators/binary_from_base64.hpp> #include &

linux之用openssl命令Base64編碼解碼、md5/sha1摘要、AES/DES3加密解密

1、我們先看openssl help命令會輸出什麼? 2、我們用openssl命令實現字串和文字的Base64編碼和解碼 openssl base64 openssl base64 -

android自帶base64編碼解碼

import android.util.Base64 String str = "Hello!"; //base64編碼 String strBase64 = Base64.encodeToS

Base64編碼解碼詳解

npm:In Browser<script src="base64.js"></script>node.jsvar Base64 = require('js-base64').B

Base64編碼解碼C語言實現

static const char *codes = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; static const unsigned char map[256] = {