base64編碼是怎麼工作的

2021-07-24 22:59:40 字數 1561 閱讀 5703

按:在布林教育php中級班的課堂上,有位同學問這樣乙個問題:

「我在用 base64_encode 對使用者名稱進行編碼時,會出來等號,是不是可以去掉?」

跟我來看完這篇文章,答案即揭曉.

1: 為什麼需要base64?

ascii碼一共規定了128個字元的編碼,這128個符號,範圍在[0,127]之間.

其中,[0,31],及127, 33個屬於不可列印的控制字元.

在電子郵件傳輸資訊時,有些郵件閘道器會把[0,31]這些控制字元給悄悄清除.

還有的早期程式,收到[128,255]之間的國際字元時,甚至會發生錯誤.

如何在不同郵件閘道器之間安全的傳輸控制字元,國際字元,甚至二進位制檔案?

於是作為mime多**電子郵件標準的一部分—base64被開發出來.

2: 一句話說完base64怎麼工作的?

把n位元組的內容對應的8*n位, 每6位砍成1段,得到 (8*n)/6 個單元,

每個單元的值,都在[0,63]之間,再把其值對應1個ascii字元,拼接起來,ok!

base64_encode(』php』) ==> 『uehq』, 編碼過程如下:

3: 如果每6位砍成1段,但不能整除,餘下2個位或4位怎麼辦?

用」0″來補至6位, 並再次轉化為」base64字元表」中的某個字元.

然後,再用」=」字元當做6個位,繼續填充,直至總位數能被8帶整除.

4:base64表示

通過上面的演示,可以看出,base64也可以編碼二進位制檔案,如郵件中的和附件.

編碼後,我們可以在網頁或郵件的原始碼裡,直接體現此,

而不必把放在伺服器上,引用其鏈結.

用例:base64(』abc.png』) ==> 『encoded-result』;

則在網頁中,

看到下面這個5角星了嗎? 右鍵看原始碼,就會發現是一串字串 :)

5: base64編碼後位元組的變化

很容易推算出, 編碼後,每6個位變成8個位.

因此,編碼後字節約比編碼前多33%.

6: base64串結尾的」=」可以去掉嗎?

從上面的編碼規則可以反推出, 在base64解碼的過程中, 要清除掉結尾處的等號,

然後再反查」base64索引與字母對照表」,轉換成原始的位元組序列.

那麼,去掉尾部的等號,並沒有丟失原始資訊,但結構變得不規範.

解碼前是否判斷完整性,這取決於你的應用程式.

實測php中的base64_decode函式,並不檢測尾部的等號是否完整.

base64編碼是怎麼工作的

1 為什麼需要base64?ascii碼一共規定了128個字元的編碼,這128個符號,範圍在 0,127 之間.其中,0,31 及127,33個屬於不可列印的控制字元.在電子郵件傳輸資訊時,有些郵件閘道器會把 0,31 這些控制字元給悄悄清除.還有的早期程式,收到 128,255 之間的國際字元時,...

base64編碼 動畫演示 Base 64 編碼

base64 是一種十分流行的編碼方式,僅僅使用 64 個字元加等號 就可以以文字的形式表示所有的二進位制資料了,因為它能夠把二進位制格式通過編碼轉換成可見字元,所有我們就可以通過的把二進位制格式比如,檔案等通過 base64 編碼然後通過文字的形式共享出去,是不是很神奇呀。把輸入的資料轉換成 二進...

Base64編碼演算法

base64要求把每三個8bit的位元組轉換為四個6bit的位元組 3 8 4 6 24 然 後把6bit再添兩位高位0,組成四個8bit的位元組,也就是說,轉換後的字串理 論上將要比原來的長1 3。轉換後,我們用乙個碼表來得到我們想要的字串 也就是最終的base64編碼 這個表是這樣的 0 a 1...