Home | Mirror | SearchITEYE 博客 | OSChina 博客 | 51CTO 博客

Chapter 3. MIME (BASE64) 專題

Table of Contents

3.1. Linux Command base64
3.2. PHP Base64
3.2.1. base64_encode
3.2.2. base64_decode
3.3. Python Base64
3.4. perl base64
3.5. Java Base64
3.6. C/C++ Base64

什麼是Base64?

按照RFC2045的定義,Base64被定義為:Base64內容傳送編碼被設計用來把任意序列的8位位元組描述為一種不易被人直接識別的形式。

為什麼要使用Base64?

在設計這個編碼的時候,我想設計人員最主要考慮了3個問題:

  1. 是否加密?

  2. 加密算法複雜程度和效率?

  3. 如何處理傳輸?

加密是肯定的,但是加密的目的不是讓用戶發送非常安全的Email。這種加密方式主要就是“防君子不防小人”。即達到一眼望去完全看不出內容即可。 基于這個目的加密算法的複雜程度和效率也就不能太大和太低。和上一個理由類似,MIME協議等用於發送Email的協議解決的是如何收發Email,而並不是如何安全的收發Email。因此算法的複雜程度要小,效率要高,否則因為發送Email而大量占用資源,路就有點走歪了。

但是,如果是基于以上兩點,那麼我們使用最簡單的愷撒法即可,為什麼Base64看起來要比愷撒法複雜呢?這是因為在Email的傳送過程中,由於歷史原因,Email只被允許傳送ASCII字元,即一個8位位元組的低7位。因此,如果您發送了一封帶有非ASCII字元(即位元組的最高位是1)的Email通過有“歷史問題”的網關時就可能會出現問題。網關可能會把最高位置為0!很明顯,問題就這樣產生了!因此,為了能夠正常的傳送Email,這個問題就必須考慮!所以,單單靠改變字母的位置的愷撒之類的方案也就不行了。關於這一點可以參考 RFC2046。 基于以上的一些主要原因產生了Base64編碼。

參考郵件正文 Content-Transfer-Encoding: base64

OpenSSL - Base64

3.1. Linux Command base64

$ cat file | base64
		
comments powered by Disqus