今天在群組剛好看有人在討論加密跟雜湊,馬上把收藏已久的這篇拿出來:

一次搞懂密碼學中的三兄弟 — Encode、Encrypt 跟 Hash - Starbugs Weekly 星巴哥技術專欄

這篇文章依序介紹編碼、加密和雜湊,並且都有給範例和應用,很適合剛認識的朋友。(也可以拿去丟給每次都講錯的朋友)

那按照慣例,我們也迅速筆記一下,讓我收到卡片庫裡:


首先是編碼。編碼其實就是換個方式表達資料而已

例如跟朋友約好 ㄅ=A, ㄆ=B… 這樣轉換下去,基本上只要知道對應的內容就可以馬上轉回來,摩斯密碼就是這類。

(題外話,以前還在紙條上用過豬圈密碼 xD)

延伸閱讀:為什麼打開檔案時會看到亂碼?跟著小明一起從傳紙條學習編碼


接著認識一下二哥:加密。

加密不只是像編碼一樣單純轉換而已,而是需要使用金鑰

例如 ㄅ=A, ㄆ=B 之後,這時候我們約好 key=2,代表字母要往下數幾格,這時候就變成 ㄅ=C, ㄆ=D,如果不知道 key=2 就可能會數錯了

當然現在用的加密還是比較正經一點,被暴力解都要跑超久那種的。此外,根據加解密是不是用同一把 Key,還會分對稱式跟非對稱式

有興趣的朋友可以閱讀內文,以及延伸閱讀:


最後是雜湊,雜湊沒在跟你還不還原的,直接就是打爛。

把各個欄位/字元 丟進去某個公式計算的方式就叫做雜湊(Hash),而這個計算公式就稱為雜湊函數(Hash function),過程可能會做各種加減乘除,最後算出一個值或字串。

因為最後一個數字是經由前幾個數字計算、濃縮出來的,所以理所當然不可能由雜湊後的結果回推出前幾個數字分別是什麼,所以雜湊的過程是不可逆的

這邊想貼另一篇的說明,也非常好懂:

[資料結構] 雜湊 (Hash)

舉例來說,雜湊函數就像一台果汁機,我們把蘋果香蕉你個芭樂 (資料) 都丟進去打一打、攪一攪,全部變得爛爛的很噁心對吧?!這時候出來的產物 (經過雜湊函數後的值),是獨一無二的,沒有辦法反向組合成原來的水果 (資料)。倘若我們把蘋果改成紅龍果,出來的產物 (經過雜湊函數後的值) 就會跟著改變,變成桃紅色的,不再是原來的淡黃色。

我個人通常是在存密碼的時候碰到,反正就算要比對的話,只要照同樣步驟打爛兩次結果長的一樣就好了吧~


最後引用一下這篇文章簡潔有力的小結,結束這一回合:

  • 編碼(Encoding)
    • 只是換個方式表達資料
    • 不需要 Key 即可解碼(不安全)
  • 加密(Encrypt)
    • 用 Key 來保護資料的機密性
    • 加密跟解密都需要 Key
  • 雜湊(Hashing)
    • 把資料丟進一串公式計算出一個結果
    • 無法反推回原字串

那麼,今天的轉貼就到這邊,明天見~

打爐石打到超時 XD,新模式也太好玩