名詞解釋

密碼雜湊是什麼?用不可逆的單向轉換安全保存密碼的機制

密碼雜湊是用不可逆的單向轉換保存密碼的方法。從防禦視角說明它與加密的區別、只用 MD5 或 SHA-256 為何危險,以及安全做法:每個使用者的 salt 加上 bcrypt、Argon2、scrypt 等慢速雜湊。

發布於 2026-06-27 更新於 2026-10-06 閱讀時間 2 分鐘
本頁內容

密碼絕不能原樣保存到資料庫裡。那該怎麼保存呢?答案就是雜湊。本文講解其機制,以及保證安全的要點(不會寫出攻擊步驟)。

雜湊 ≠ 加密

兩者常被混淆,但目的恰好相反。加密是「為了以後讀回,可用金鑰還原」的轉換。**雜湊是「無法還原(單向)」**的轉換。密碼這種資訊,連營運方本來都不需要讀回,所以特意採用無法還原的雜湊更合適。

加密(可逆)

明文 ⇄ 密文。有金鑰就能還原。適用於以後要讀回的資料

雜湊(單向)

密碼 → 雜湊值。無法還原。適用於保存密碼

密碼用『無法還原』的雜湊來保存。與加密(可還原)的目的恰好相反。

登入時,要看的是「把輸入的密碼用同樣的步驟做雜湊,再和已保存的雜湊是否一致」。無需取出原始密碼。

為什麼「裸用 MD5/SHA-256」還不夠

MD5 和 SHA-256 是快速雜湊。這本是有用的特性,但在密碼保存上卻成了弱點。因為攻擊者可以針對外洩的雜湊,每秒計算海量候選來逐一比對。

  • 彩虹表:把「常見密碼→其雜湊」預先計算好的巨大對照表。如果是裸雜湊,只要查表就能找到符合。
  • 暴力破解(brute force):雜湊越快,單位時間內能嘗試的候選越多=越容易被攻破。

通用雜湊與密碼雜湊的區別

兩者都叫「雜湊」,但被設計來做不同的工作。只有右欄適合用來保存密碼。

通用雜湊(MD5、SHA-1、SHA-256)密碼雜湊(Argon2id、bcrypt、scrypt、PBKDF2)
設計用途偵測檔案竄改、簽章等保存密碼
速度越快越好故意放慢(可調整)
salt不在設計之內在設計之內(PBKDF2 由呼叫端提供)
調整計算成本無法cost、迭代次數或記憶體;隨時間調高
用於保存密碼不要用使用

NIST SP 800-63B-4 同樣要求,密碼要用以 salt 與成本參數為輸入的密碼雜湊方式保存,並在不影響效能的範圍內把成本設得盡量高,且隨時間調高。

讓它安全的兩項措施

1

加上 salt(每個使用者不同的值)

保存前,先為每個使用者混入一個不同的隨機值(salt),再做雜湊。這樣即使密碼相同,每個人的保存值也各不相同,彩虹表被廢掉,對重複使用密碼的批次破解也無從下手。

2

使用故意做得很慢的專用雜湊

bcrypt / Argon2 / scrypt 可以把計算有意做得很重(成本參數)。對正常登入的單次而言慢到無所謂,但能把攻擊者的暴力破解拖到現實中不可行的速度。salt 的添加也已內建其中。

實際案例:外洩公告寫著「已雜湊」的時候

外洩公告有時會說明密碼是以明文、雜湊還是加密方式保存。以下依保存方式整理本站報導過的案例。

案例關於密碼公開的內容對使用者的意義
宅ふぁいる便(2019)以明文保存可以直接讀出。使用相同密碼的其他服務也有風險
櫻花網路(Sakura Internet,2026)部分初始密碼沒有做雜湊仍在使用初始密碼的人,需要立即變更
Gyazo(2026)密碼雜湊外洩;未公開方式依方式不同可能被還原。該公司已請使用者變更密碼

閱讀公告時要記住兩件事:

  • 光是「已雜湊」並不能告訴你是否安全。裸用 MD5 與加了 salt 的慢速雜湊,在密碼被還原的難易度上差異極大
  • 如果沒有寫明方式,就當作是脆弱的方式來應對。在該服務以及其他使用相同密碼的服務上變更密碼

你可以用如何確認密碼是否已外洩,確認自己的電子郵件地址是否出現在過去的外洩事件中。

如何檢查自己的網站與帳號

1

使用者:觀察密碼重設的方式

如果「忘記密碼」會用電子郵件把原本的密碼寄給你,該服務很可能是以明文或可還原的形式保存密碼。不要在那裡使用你在其他地方也用的密碼。

2

使用者:確認密碼的強度

雜湊對又長又難猜的密碼保護效果最好。用密碼強度檢查工具確認大致的強度,並把保管交給密碼管理器。

3

開發者:確認用哪個函式保存密碼

找出程式碼中用來保存與驗證密碼的函式。PHP 的 password_hash()、Django 內建的認證,或 bcrypt/Argon2 函式庫,都是密碼專用的,基本面都有顧到。直接呼叫 md5()、sha1() 或 sha256 的地方,都是需要轉移的對象。

4

開發者:確認保存的值與設定

如何辨識保存的雜湊、OWASP 的最低設定,以及如何從脆弱的演算法轉移,請見密碼的安全保存方法。

本站觀點:不要自己拼湊

以為「給 MD5 加個 salt 就夠了」,是很常見的錯誤。安全的密碼保存,要把 salt 的產生與保管、計算成本的調節、對時序差異的考量都包含進來,才算成立。比起自己東拼西湊,交給語言、框架的官方密碼函式(很多內部都用 bcrypt/Argon2)來處理,在本站看來才是最安全、最可靠的。新專案請把 Argon2id 作為首選。

出處(一手資料)

  • NIST「SP 800-63B-4 Digital Identity Guidelines: Authentication and Authenticator Management」(2025 年 8 月)— pages.nist.gov(以 salt 與成本參數為輸入的雜湊方式;隨時間調高成本)
  • OWASP「Password Storage Cheat Sheet」— cheatsheetseries.owasp.org(雜湊與加密的區別、建議的演算法、工作因子)
  • RFC 9106「Argon2 Memory-Hard Function for Password Hashing and Proof-of-Work Applications」— rfc-editor.org
  • 各案例的出處(各公司自己的公告)列在本站連結的文章中

繼續閱讀

分類編號

CWE 對造成漏洞的弱點類型進行分類,MITRE ATT&CK 對攻擊者的技術進行分類。兩者皆由 MITRE 維護,廣泛用於標註漏洞資訊與偵測規則。

CWE™: Copyright © 2006–2026, The MITRE Corporation. CWE is a trademark of The MITRE Corporation. The MITRE Corporation hereby grants you a non-exclusive, royalty-free license to use CWE for research, development, and commercial purposes. Any copy you make for such purposes is authorized on the condition that you reproduce MITRE’s copyright designation and this license in any such copy. CWE Terms of Use

© 2026 The MITRE Corporation. This work is reproduced and distributed with the permission of The MITRE Corporation. MITRE ATT&CK and ATT&CK are registered trademarks of The MITRE Corporation. The MITRE Corporation (MITRE) hereby grants you a non-exclusive, royalty-free license to use ATT&CK® for research, development, and commercial purposes. Any copy you make for such purposes is authorized provided that you reproduce MITRE's copyright designation and this license in any such copy. ATT&CK Terms of Use

FAQ

Q雜湊和加密有什麼區別?
A

加密是『有金鑰就能還原(可解密)』的轉換,用於以後需要讀回資料的場景。雜湊是『無法還原(單向)』的轉換。密碼本來就不需要營運方讀回,所以特意採用無法還原的雜湊更合適。即便資料庫被盜,也無法從雜湊中直接取出原始密碼。

Q用 MD5 或 SHA-256 做雜湊就安全嗎?
A

僅此還不夠。MD5/SHA-256 是『快速』雜湊,攻擊者每秒能嘗試海量候選,因此常見密碼會被暴力破解或彩虹表(預先計算好的對照表)攻破。要做到安全,需要為每個使用者加上不同的『salt』,並使用『故意做得很慢』的專用雜湊(bcrypt·Argon2·scrypt)。

Q到底該用哪一個?
A

新專案首選 Argon2(尤其是 Argon2id),其次是 bcrypt 或 scrypt。它們的機制中都內建了 salt 的添加與計算成本的調節。比起自己拼湊 MD5+salt,使用這些標準實作(語言/框架的官方函式)更安全、更可靠。

Q做過雜湊的密碼會被破解嗎?
A

雜湊無法被計算還原成密碼。但可以把候選密碼用同樣的方式做雜湊,看是否一致。因此短的或常見的密碼很容易被找出,演算法越快越是如此。如果密碼夠長、沒有重複使用,並以加了 salt 的慢速雜湊保存,要找出它在現實中是不可行的。

Q為什麼忘記密碼時,服務不會告訴我原本的密碼?
A

因為正確做雜湊的服務,自己也沒有你原本的密碼。所以流程才會是重設(由你設定新的密碼)。反過來說,會用電子郵件把原本的密碼寄給你的服務,很可能是以明文或可還原的形式保存密碼。

Q公司公告密碼雜湊外洩時,我需要變更密碼嗎?
A

需要。公司常常不公開雜湊的方式,而方式若是脆弱的,就可能被還原。在其他使用相同或稍作變化的密碼的服務上,也請一併變更。