開發與維運

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

原文鏈接

一、定義

Base64編碼 是一種基於 64 個可打印字符來表示二進制數據的方法。目前 Base64 已經成為網絡上常見的傳輸 8 位二進制字節代碼的編碼方式之一。
為什麼會有 Base64 編碼呢?因為有些網絡傳送渠道並不支持所有的字節,例如:傳統的郵件只支持可見字符的傳送,像 ASCII 碼的控制字符就不能通過郵件傳送。這樣用途就受到了很大的限制。
圖片的二進制流的每個字節不可能全部是可見字符,這就導致圖片的二進制流無法傳送。最好的解決方式就是在不改變傳統協議的情況下,做一種擴展方案來支持二進制文件的傳送。即把不可打印的字符也能用可打印字符來表示,問題就解決了。
Base64 編碼就是為了實現這一方案而設計的編碼格式。
Base64 就是一種基於 64 個可打印字符來表示二進制數據的表示方法
它的編碼過程如下:

  • 將待轉換的字符串每三個字節分為一組,每個字節佔 8 個二進制位,那麼共有 24 個二進制位。
  • 將第(1)步得到的每 24 個二進制位分為每 6 個一組,則每 3 個字節可分為 4 組。
  • 在每組前面添加兩個 0 ,每組由 6 個二進制位變為 8 個二進制位,總共 32 個二進制位,即四個字節。
  • 根據 Base64編碼對照表(見下表)獲得對應的值。

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

二、補充

挺多人會誤以為 Base64 是加密算法,喜歡在數據傳輸不安全的時候來一句:使用 Base64 加密一下唄。
我們先來看一下加密的定義:在密碼學中,加密(英語:Encryption)是將明文信息改變為難以讀取的密文內容,使之不可讀的過程。只有擁有解密方法的對象,經由解密過程,才能將密文還原為正常可讀的內容。
所謂加密算法就是加密的方法。
如果你使用  Base64  進行 “加密” ,第三方拿到數據可以瞬間解密,根本無法實現你想要的 加密 效果。因此,Base64 不能說是 加密算法,只能說是 編碼

三、Tips

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

作者 | 程序員小吳

來源 | 五分鐘學算法

Leave a Reply

Your email address will not be published. Required fields are marked *