天天看點

五分鐘知識科普:什麼是 Base64編碼 | 算法必看系列三十九

原文連結

一、定義

Base64編碼 是一種基于 64 個可列印字元來表示二進制資料的方法。目前 Base64 已經成為網絡上常見的傳輸 8 位二進制位元組代碼的編碼方式之一。

為什麼會有 Base64 編碼呢?因為有些網絡傳送管道并不支援所有的位元組,例如:傳統的郵件隻支援可見字元的傳送,像 ASCII 碼的控制字元就不能通過郵件傳送。這樣用途就受到了很大的限制。

圖檔的二進制流的每個位元組不可能全部是可見字元,這就導緻圖檔的二進制流無法傳送。最好的解決方式就是在不改變傳統協定的情況下,做一種擴充方案來支援二進制檔案的傳送。即把不可列印的字元也能用可列印字元來表示,問題就解決了。

Base64 編碼就是為了實作這一方案而設計的編碼格式。

Base64 就是一種基于 64 個可列印字元來表示二進制資料的表示方法。

它的編碼過程如下:

  • 将待轉換的字元串每三個位元組分為一組,每個位元組占 8 個二進制位,那麼共有 24 個二進制位。
  • 将第(1)步得到的每 24 個二進制位分為每 6 個一組,則每 3 個位元組可分為 4 組。
  • 在每組前面添加兩個 0 ,每組由 6 個二進制位變為 8 個二進制位,總共 32 個二進制位,即四個位元組。
  • 根據 Base64編碼對照表(見下表)獲得對應的值。
五分鐘知識科普:什麼是 Base64編碼 | 算法必看系列三十九

大多數編碼都是由字元串轉化成二進制的過程,而 Base64 的編碼則是從二進制轉換為字元串。與正常恰恰相反,Base64 編碼主要用在傳輸、存儲、表示二進制領域,不能算得上加密,隻是無法直接看到明文。也可以通過打亂Base64 編碼來進行加密。中文有多種編碼(比如:utf-8、gb2312、gbk等),不同編碼對應Base64編碼結果都不一樣。

二、補充

挺多人會誤以為 Base64 是加密算法,喜歡在資料傳輸不安全的時候來一句:使用 Base64 加密一下呗。

我們先來看一下加密的定義:在密碼學中,加密(英語:Encryption)是将明文資訊改變為難以讀取的密文内容,使之不可讀的過程。隻有擁有解密方法的對象,經由解密過程,才能将密文還原為正常可讀的内容。

所謂加密算法就是加密的方法。

如果你使用  Base64  進行 “加密” ,第三方拿到資料可以瞬間解密,根本無法實作你想要的 加密 效果。是以,Base64 不能說是 加密算法,隻能說是 編碼。

三、Tips

如果你需要在網絡上留下你的 微信号、郵箱、QQ 、手機号等具有隐私資訊的時候,你不妨留下它們對應的 Base64 編碼資訊。一方面,想要聯系你的人需要進行解碼操作,可以過濾一部分需求沒那麼強烈的人;另外一方面也可以形成 簡單的反爬蟲 操作,不容易被爬蟲收集到你的隐私資訊。

作者 | 程式員小吳

來源 | 五分鐘學算法

繼續閱讀