搞懂雜湊(Hash):做權限驗證前一定要知道的事

Published December 11, 2025 by 徐培鈞
基礎概念

在做權限驗證的時候,有一個觀念你一定要先搞懂——雜湊(Hash)

為什麼這麼重要?因為不管你之後要做密碼驗證、Token 驗證、OTP 還是 JWT,通通都會碰到它。

如果你搞不清楚雜湊是什麼、能幹嘛、不能幹嘛,後面在實作的時候很容易搞混,然後就會踩到一堆坑。

這篇文章會用最白話的方式,讓你徹底搞懂雜湊到底在幹嘛。

雜湊是什麼?

從字面上來理解

「雜湊」這兩個字拆開來看:

  • :很雜、很亂
  • :湊在一起

合起來的意思就是:把東西打散、攪亂、湊在一起,變成一個全新的東西

英文叫做 Hash,有時候你也會看到有人直接音譯成「哈希」,像是「哈希表」、「哈希函式」,指的都是同一件事。

實際上怎麼運作?

假設你有一份資料,不管是一段文字、一張圖片、還是一個檔案都可以。

你把這份資料丟進一個叫做 Hash Function(雜湊函式) 的東西,它就會輸出一個全新的值,這個值就叫做雜湊值

你的資料 ──→ Hash Function ──→ 雜湊值

就這麼簡單。

雜湊最重要的特性:回不去了

單向的,不能逆轉

雜湊最最最重要的特性就是:它是單向的

什麼意思?就是你的資料經過雜湊之後,會變得完全認不出來,而且沒辦法從雜湊值推回原本的資料

打個比方:

  • 你把一顆蘋果丟進果汁機 → 變成蘋果汁
  • 你沒辦法把蘋果汁變回一顆完整的蘋果

雜湊就是這樣,是個不可逆的過程。

這在權限驗證上有什麼用?

這個特性超級重要!

比如說你在做會員登入功能,使用者設定了密碼 abc123。你不會直接把 abc123 存進資料庫(這樣太危險了),而是把它雜湊過後再存。

之後使用者登入的時候,你就把他輸入的密碼再雜湊一次,然後比對兩個雜湊值是不是一樣。

這樣就算資料庫被偷了,小偷拿到的也只是一堆雜湊值,他沒辦法知道原本的密碼是什麼。

常見的雜湊方式

市面上有很多不同的 Hash Function,常見的有:

  • MD5:比較舊,算是比較簡單的
  • SHA-256:目前很常用,比較安全
  • SHA-512:更複雜,安全性更高

越複雜越難破解

你用的 Hash Function 越複雜,產生出來的雜湊值就越難被看出原本是什麼,也就越難被還原。

可以這樣想像:

  • 簡單的雜湊 = 馬賽克打得很薄,有心人還是看得出來
  • 複雜的雜湊 = 馬賽克打得超厚,根本看不出原本是什麼

雜湊真的完全沒辦法破解嗎?

理論上不行,但有人用偷吃步

雖然說雜湊是單向的、不能逆轉,但還是有人想出一些偷吃步的方法。

最有名的就是查表法,其中最知名的叫做彩虹表(Rainbow Table)

彩虹表是什麼?

因為 Hash Function 是固定的數學公式,所以:

  • A 經過某個 Hash Function 永遠會變成 XXX
  • B 經過同一個 Hash Function 永遠會變成 OOO

既然規則是固定的,那有心人就可以事先把大量常見的資料都雜湊過一遍,建立一張超大的對照表。

雜湊後的值5f4dcc3b…
雜湊後的值e10adc39…
雜湊後的值21232f29…
雜湊後的值

這張表可能有幾億筆資料。

當他拿到你的雜湊值,只要去這張表裡面找,找到一樣的雜湊值,就可以反推出原本的資料是什麼。

所以太簡單的雜湊很危險

像 MD5 因為算法比較簡單,現在網路上已經有超級大的彩虹表可以查。你用 MD5 雜湊過的東西,很可能一查就被破解了。

這也是為什麼現在做權限驗證的時候,會建議用更複雜的 Hash Function,或是搭配其他技術(像是加鹽)來增加破解難度。

重點整理

來幫大家複習一下今天講的重點:

  1. 雜湊就是把資料打亂,變成一個新的值
  2. 雜湊是單向的,沒辦法從雜湊值推回原本的資料
  3. Hash Function 越複雜越安全,像 MD5 太簡單已經不夠用了
  4. 彩虹表是一種偷吃步,事先建好對照表來查
  5. 在做密碼驗證、Token、OTP、JWT 等等的時候,都會用到雜湊的觀念

最後

搞懂雜湊是做權限驗證的第一步。之後我們還會聊到編碼(Encode)和加密(Encrypt),這三個東西很容易搞混,但它們是完全不同的東西。

先把雜湊搞懂,後面學其他的就會輕鬆很多囉!