Logo

新人日誌

首頁關於我部落格

新人日誌

Logo

網站會不定期發佈技術筆記、職場心得相關的內容,歡迎關注本站!

網站
首頁關於我部落格
部落格
分類系列文

© 新人日誌. All rights reserved. 2020-present.

本文為「Web 驗證入門」系列第 3 篇

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

最後更新:2025年12月11日基礎概念

在做權限驗證的時候,有一個觀念你一定要先搞懂——雜湊(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

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

原本的值雜湊後的值
password5f4dcc3b…
123456e10adc39…
admin21232f29…
……
雜湊後的值5f4dcc3b…
雜湊後的值e10adc39…
雜湊後的值21232f29…
雜湊後的值…

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

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

所以太簡單的雜湊很危險

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

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

重點整理

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

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

最後

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

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

上一篇Authentication 與 Authorization 差異解析:搞懂 401 和 403 錯誤
下一篇搞懂編碼(Encode):資料轉換的基本功
目前還沒有留言,成為第一個留言的人吧!

發表留言

留言將在審核後顯示。

基礎概念

目錄

  • 雜湊是什麼?
  • 從字面上來理解
  • 實際上怎麼運作?
  • 雜湊最重要的特性:回不去了
  • 單向的,不能逆轉
  • 這在權限驗證上有什麼用?
  • 常見的雜湊方式
  • 越複雜越難破解
  • 雜湊真的完全沒辦法破解嗎?
  • 理論上不行,但有人用偷吃步
  • 彩虹表是什麼?
  • 所以太簡單的雜湊很危險
  • 重點整理
  • 最後