開發者工具 · SHA 雜湊計算器
SubtleCrypto.digest 如何在瀏覽器中計算 SHA-256 雜湊值
· 工作原理
SHA-256 密碼學 瀏覽器 API
每個現代瀏覽器都可以透過 Web Crypto 本地雜湊位元組。這篇文章遵循從 TextEncoder 到 crypto.subtle.digest 到十六進位摘要的一個字串,並解釋了每個步驟的限制。
沒有 npm install 的哈希 - 本機摘要擊敗捆綁庫的情況
您可以計算短文本值的摘要,而無需安裝哈希包或將資料發佈到遠端哈希網站。瀏覽器在安全來源上公開 crypto.subtle.digest 。雜湊是確定性的固定長度位元組指紋;它不會隱藏輸入或證明是誰提供的。 ToolAcre 使用瀏覽器實現,而不是提供手寫的 SHA 演算法,並將字串在選項卡中進行雜湊處理。
文字不是位元組 - 在散列之前使用 TextEncoder 將輸入編碼為 UTF-8,以及為什麼此步驟決定答案
文字“café”和輸入散列的位元組不是同一類型的物件。 TextEncoder 將字串對應為 UTF-8 位元組(咖啡館為 63 61 66 C3 A9),而簡單的 Latin-1 轉換將使用 E9 作為最終字元並產生不同的摘要。即使視覺上相同的文字也可以有不同的 Unicode 規範化形式。在比較 JavaScript、CLI 和伺服器之間的雜湊值之前,先就編碼和規範化達成一致。 ToolAcre 的文字模式在雜湊之前明確執行其 UTF-8 轉換。
摘要调用 — crypto.subtle.digest 带有算法名称和 ArrayBuffer,以及为什么它返回一个承诺
crypto.subtle.digest("SHA-256", bytes) 傳回一個 Promise,因為加密工作可能是非同步的;在讀取輸出之前等待它。此方法採用整個輸入緩衝區而不是流式迭代器。無論輸入是三個字符還是三百萬個字符,SHA-256 都會發出 256 位元(32 位元組)。安全性上下文限制意味著 SubtleCrypto API 需要 HTTPS 或 localhost,並且該工具會報告其不存在,而不是發明後備。
從 ArrayBuffer 到 hex — 將結果位元組轉換為人們識別的 64 個字元的字串
Promise 解析為位元組的 ArrayBuffer,而不是熟悉的十六進位數字字串。根據需要將每個位元組轉換為兩個帶有前導零的基數 16 字符,為 SHA-256 產生正好 64 個小寫字符。這種十六進位表示形式使 32 位元組的長度加倍,但不會更改摘要。 Base64 可以更緊湊地表示相同的 32 個位元組;只有在確認演算法、輸入編碼和輸出表示匹配後,比較才有意義。
工作範例 - 逐步散列一個短字串,顯示每個階段的位元組
對於 ASCII 文字 abc,UTF-8 產生位元組 61 62 63。這些確切位元組的 SHA-256 為 ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad。在 ToolAcre 和另一個受信任的雜湊實作中對此進行測試:將 abc 更改為 abc 後跟換行符會產生不同的結果。如果輸出不同,請在懷疑加密原語之前檢查隱藏的空白和位元組編碼。顯示的摘要是可重複的測試向量,而不是聲稱 abc 是秘密。
安全上下文 - 為什麼 crypto.subtle 僅在 HTTPS 和 localhost 上可用
crypto.subtle 是一個安全上下文 API。生產 HTTPS 頁面和本機主機開發頁面通常會公開它;普通的不安全遠端 HTTP 頁面可能不會。該工具還需要足夠的記憶體來保存輸入和輸出。在 Web Crypto 不可用的情況下,默默地切換到未經審查的 JavaScript 雜湊將使安全敏感的結果依賴不同的實作。明確失敗並選擇一個安全的環境。
這不包括 - 鍵控哈希 (HMAC) 和非常大輸入的增量哈希,這是一次性摘要 API 不提供的
一次性摘要 API 不是針對大檔案的增量哈希。 SHA-256 不是密碼儲存方案:快速的無鹽雜湊使猜測變得廉價,因此密碼儲存需要專門建造的、加鹽的、故意昂貴的 KDF。 SHA-1 可能會顯示用於舊的互通性,但其抗衝突性已被破壞,並且對於新的完整性或簽章系統來說不是一個好的選擇。 HMAC 是金鑰認證,與消化未經認證的位元組不同。
重點:瀏覽器已經有一個雜湊函數-ToolAcre SHA 雜湊計算器正是使用這個 API,所以它的輸出就是瀏覽器本身的
瀏覽器已經提供了 SHA-256:將文字編碼為字節,等待摘要,然後格式化其結果以進行比較。 ToolAcre SHA 雜湊計算器會遵循貼上文字的路徑,並將 SHA-1 標記為僅舊版。首先將 abc 與已知結果進行比較,然後對您了解其位元組和編碼的實際非敏感材料進行雜湊處理。