雜湊 vs 加密:它們有什麼不同?

核心差異:方向不同

雜湊和加密最根本的差別只有一句話:雜湊是單向的,加密是雙向的

加密的目的是保密,所以必須能解回原文——你今天把資料加密,明天用對的金鑰一定要能解開,否則資料就永遠回不來了。雜湊的目的不是保密,而是驗證,它刻意設計成「算得出去、推不回來」,根本沒有「解雜湊」這回事。

把這個方向性記住,其他差異都能順理成章地推導出來。

雜湊:單向的指紋

雜湊函數把任意長度的輸入壓成固定長度的輸出,過程中刻意丟失資訊,因此無法還原。它的關鍵特性是:

正因為不可逆又確定,雜湊適合用在「只想確認是不是同一份東西、卻不需要看到原文」的場合,例如驗證密碼、檢查檔案完整性。想深入了解雜湊本身,可以讀什麼是雜湊函數

加密:可逆的保密

加密把可讀的明文(plaintext)透過演算法與金鑰轉成看不懂的密文(ciphertext),日後再用金鑰解回明文。它的關鍵特性是:

加密又分兩類:

小提示:判斷一個東西是雜湊還是加密,問一句話就清楚了——「拿到結果之後,能不能變回原來的資料?」能還原就是加密,不能還原就是雜湊。

一張表看懂差別

比較項目雜湊加密
方向單向,不可逆雙向,可解密
目的驗證、完整性保密
金鑰不需要需要
輸出長度固定隨內容變化
典型演算法SHA-256、MD5AES、RSA
能否還原原文不能能(有金鑰時)

常見混淆與誤用

「把密碼加密存起來」

這句話幾乎都是誤用。儲存密碼應該用雜湊(而且是 bcrypt、Argon2 這類密碼專用雜湊),不是加密。理由很簡單:用加密存密碼,代表系統握有能把密碼解回明文的金鑰,一旦金鑰外洩,所有密碼就全曝光了。用雜湊則根本沒有「解回明文」的途徑,登入時只要比對雜湊即可。詳見雜湊演算法安全性比較

「雜湊就是一種加密」

不是。加密可以解密,雜湊不能,兩者目的也不同。把雜湊稱作「加密」是最常見的術語錯誤,會在溝通與設計上造成實質的安全誤判。

「Base64 是加密」

更不是。Base64 是編碼,沒有金鑰、沒有保密效果,任何人都能直接還原,純粹是換一種方式表示資料。詳見文末說明。

何時用哪個?

用一個簡單原則來判斷:之後還需不需要拿回原始資料?

有時候兩者會搭配使用。例如數位簽章就是先對內容算雜湊,再用私鑰加密那個雜湊值——雜湊負責壓縮並偵測竄改,加密負責證明簽署者身分。

順帶一提:編碼不是加密

還有第三個容易和前兩者混淆的概念:編碼(Encoding),例如 Base64、URL 編碼。編碼只是把資料換成另一種表示形式,方便傳輸或儲存,它沒有金鑰、不提供任何保密,任何人都能直接解回原文。三者放在一起對照:

想實際感受雜湊「不可逆、確定性」的特性,可以打開工具輸入任意文字,觀察相同輸入永遠產生相同結果、而微小改動就讓輸出天差地別。

立即使用雜湊值產生器