免費線上哈希和 HMAC 生成器
加密雜湊可驗證資料完整性、簽署 Webhook 並比較秘密,而無需儲存明文。 Dokall 支援具有十六進位或 Base64 輸出的 SHA-1、SHA-256、SHA-384、SHA-512 和 HMAC。
貼上文本,選擇演算法,然後複製哈希值。使用比較功能來驗證兩個雜湊匹配 - 對於偵錯身份驗證和校驗和工作流程至關重要。
什麼是哈希?
哈希函數接受任意大小的輸入,併產生固定大小的輸出(哈希、摘要或校驗和)。相同輸入總是產生相同哈希。輸入哪怕有微小變化,也會產生完全不同的哈希——這稱為雪崩效應。
密碼學哈希函數還有額外性質:從哈希反推原始輸入在計算上應不可行(原像抗性);找到兩個不同輸入產生相同哈希應不可行(抗碰撞);找到與給定輸入哈希相同的另一輸入應不可行(第二原像抗性)。這些性質使哈希對安全、數據完整性和身份驗證至關重要。
哈希算法對比
MD5 產生 128 位(32 字符十六進制)哈希。速度快,但在安全用途上已被攻破——可在數秒內生成碰撞。仍可用於非安全校驗和(檔案完整性、快取鍵),但絕不能用於密碼或數字簽名。
SHA-1 產生 160 位(40 字符十六進制)哈希。同樣已被攻破——自 2017 年起存在實用碰撞攻擊。已被瀏覽器、證書頒發機構和 git(正遷移到 SHA-256)棄用。新應用應避免使用。
SHA-256 產生 256 位(64 字符十六進制)哈希,屬於 SHA-2 家族。目前被認為安全,尚無已知實用攻擊。用於 TLS 證書、比特幣、數字簽名及多數安全應用。是通用哈希的預設選擇。
SHA-512 產生 512 位(128 字符十六進制)哈希,同屬 SHA-2。在 64 位系統上因以 64 位字運算而比 SHA-256 更快,並提供更大安全裕度。在需要最大哈希長度或安全裕度時使用。
SHA-3(Keccak)是與 SHA-2 不同的算法家族,作為 SHA-2 萬一被攻破時的備份而標準化。安全,但軟件實現比 SHA-2 慢。用於部分區塊鏈協議,以及需要算法多樣性時作為替代。
哈希與加密
哈希是單向的:無法從哈希恢復原始數據。加密是雙向的:有正確密鑰即可將密文解密回原始明文。
需要在不存儲或恢復原文的情況下驗證數據時,使用哈希。密碼驗證是經典例子——存儲哈希,用户登錄時對其輸入做哈希並比較。檔案完整性檢查也是——對檔案做哈希、分享哈希,接收方即可驗證檔案未被篡改。
需要保護數據並稍後取回時,使用加密。含個人數據的數據庫字段、傳輸中的檔案和通信通道需要加密,而非哈希。
常見錯誤是用加密存密碼。若加密密鑰泄露,所有密碼都會暴露。使用正確的密碼哈希(bcrypt、Argon2)時,即使數據庫完全泄露,也不會直接暴露密碼。
HMAC:基於哈希的消息認證
HMAC(基於哈希的消息認證碼)將哈希函數與密鑰結合,產生認證碼。普通哈希驗證完整性(數據未被更改),HMAC 同時驗證完整性和真實性(數據來自知道密鑰的人)。
HMAC 算法如下:HMAC(key, message) = Hash((key XOR opad) || Hash((key XOR ipad) || message))。實踐中,你只需用密鑰、消息和哈希算法調用語言自帶的 HMAC 函數。
常見用途:API 請求籤名(服務器驗證請求來自授權客户端)、webhook 驗證(GitHub、Stripe 和 Slack 用 HMAC-SHA256 簽名 webhook 載荷以便你驗證真實性)、JWT 簽名(HS256 即 HMAC-SHA256),以及 cookie 簽名(框架對會話 cookie 簽名以防止篡改)。
正確哈希密碼
切勿用 SHA-256、SHA-512 或 MD5 哈希密碼。這些算法設計為快速——現代 GPU 每秒可計算數十億次 SHA-256 哈希,使暴力破解變得輕而易舉。
使用專為密碼哈希設計的算法:bcrypt、scrypt 或 Argon2id。它們故意緩慢(可配置工作因子)且內存困難(抗 GPU 加速)。Argon2id 是 OWASP 當前推薦,也是密碼哈希競賽的獲勝者。
每個密碼務必使用唯一隨機鹽。鹽在哈希前與密碼結合,確保相同密碼產生不同哈希。不加鹽時,攻擊者可用預計算彩虹表一次破解整個數據庫。bcrypt 和 Argon2 會自動處理加鹽。
推薦參數(2024):bcrypt 成本因子 12+;Argon2id 取 m=19456 KB、t=2、p=1;或 scrypt 取 N=2^15、r=8、p=1。調整參數使哈希在服務器上耗時 100–500ms——足以抵抗暴力破解,又不明顯影響用户體驗。
哈希的常見用途
數據完整性驗證:下載檔案後,將其 SHA-256 哈希與公佈的哈希比對,確認傳輸過程中未被損壞或篡改。包管理器(npm、pip)以此驗證包完整性。
基於內容的尋址:Git 使用 SHA-1(正遷移到 SHA-256)通過內容哈希標識每個提交、樹和 blob。IPFS 使用 multihash 做內容尋址。Docker 鏡像層由其內容摘要標識。
去重:對檔案內容哈希並比較哈希,無需比較整個檔案即可發現重複。備份系統和雲存儲用此避免重複存儲相同數據。
快取鍵:對請求參數哈希以生成快取鍵。相同參數產生相同哈希時,返回快取響應而非重新計算。
數字簽名:先對文檔哈希,再用私鑰對哈希簽名。這比簽署整個文檔更快,且無論文檔大小都產生固定大小的簽名。