昨天提到了 HTTPS 是 HTTP 協定透過 SSL、TSL 對於傳送的數據進行加密,那加密與常聽到的編碼或是雜湊,是一樣的概念嗎?或是三者之間的區別是什麼?這些問題在我之前的學習過程中一度造成很大的困惑,於是今天就來分享一下我對於他們的理解~
編碼就是將我們所打出來的內容,根據各種編碼方式的對照表進行轉換,變成另外一種格式。編碼並沒有任何加密的效果,只要知道使用的編碼方式是哪一種,就可以按照對照表得知原文是什麼。也因此如果將編碼與加密混為一談的話,對於傳送的隱私訊息僅採用編碼的話,其實就跟明文直接傳送沒有什麼區別了。
因為電腦所能夠理解只有二進位制
的數據(0、1),對於人類所能理解的文字、圖片、音樂甚至是影片,是無法辨識的,因此我們需要透過編碼將這些內容轉換成二進位制文件使電腦進行運算以及處理。以下用ASCII
當例子:
下面是輸入的原文
Hello
會先透過 ASCII 的表轉換成以下十進位制數字
72 101 108 108 111
最後將十進位制數字轉換成以下二進位制數字,再透過網路進行傳輸
01001000 01100101 01101100 01101100 01101111
而不同的系統間對於編碼的方式也有所差異,因此在數據傳輸中會需要透過編碼轉換成對方可以理解的格式再進行傳輸(ex. base64),以下會簡單介紹一下常聽到的 base64 :
Base encoding of data is used in many situations to store or transfer
data in environments that, perhaps for legacy reasons, are restricted
to US-ASCII data. Base encoding can also be used in new
applications that do not have legacy restrictions, simply because it
makes it possible to manipulate objects with text editors.
以上是RFC 4648中的敘述,因為某些協定(ex. SMTP,也就是傳輸電子郵件的協定)只支援ASCII格式的內容。我們在打電子郵件時,所輸入的文字內容可能是透過UTF-8、UTF-16等轉換成二進制內容,可是這個轉換的內容不一定符合 ASCII 格式,所以還要再透過 base64 轉換成只包含 ASCII 字符的字符串,再經由 SMTP 進行處理,以避免資料在傳輸過程中因為格式錯誤造成損壞,造成收信方打開信件看到以下畫面:
今天簡單介紹了編碼是什麼以及常見的用途,明天就要進入到下個階段,也就是加密拉~
RFC 4648
MDN
Why do we use Base64?