SHA-512 是一種在 NIST FIPS 180-4 中標準化的 512 位元加密雜湊函式,正確產生的 SHA-512 摘要始終正好是 64 個位元組,以 128 個小寫十六進位字元或標準填補 Base64 形式呈現。若要產生 SHA-512 雜湊值,請提供精確的 UTF-8 文字或原始檔案位元組,執行演算法,然後複製消費者所預期的表示方式(同一 64 位元組的十六進位或 Base64)。輸出長度是由規格固定,而非由輸入長度決定:空字串與多 GB 的檔案都會產生 128 字元的十六進位字串。新增一個句號、將 LF 換成 CRLF、將 Unicode 正規化,或加入位元組順序標記,都會改變摘要中的每一個字元,因為 SHA-512 是確定性的,且對每個位元組都非常敏感。瀏覽器可以在本機執行此計算,因此您的訊息或檔案都不會離開您的裝置。若 SHA-512 結果不符合標準的 128 字元長度,幾乎總是代表鏈結中的某處出現了被截斷的變體。SHA-512/256、SHA-512/224、SHA-384 與 HMAC-SHA-512 都共用部分 SHA-512 壓縮函式,但產生不同的輸出,且彼此不可互換。將每個字元與 RFC 6234 參考值逐一比對,是確認結果為真正完整 SHA-512 的唯一可靠方法。

generate sha512 hash
用正確的方式產生 SHA-512 雜湊:完整的 512 位元

SHA-512 的運作原理與輸出長度為何固定

SHA-512 屬於 SHA-2 家族的一部分,以 64 位元的字為運算單位。演算法會將輸入填補成 1024 位元的區塊,將每個區塊展開成 80 個字的訊息排程,並在 80 輪中更新八個 64 位元的狀態值。這八個狀態值的最終串接就是 512 位元的輸出。由於狀態大小是固定的,無論輸入長短,輸出永遠都是 64 位元組。演算法本身沒有截斷步驟,也沒有長度擴充;您所看到的,就是完整的摘要。

這 64 個位元組可以用兩種等效的方式顯示:

  • 小寫十六進位 - 128 個字元,每個位元組兩個十六進位數字。這是校驗碼、軟體發行說明與協定規格中最常見的格式。
  • 填補 Base64 - 同一 64 位元組的標準 RFC 4648 Base64,含填補字元約 88 個字元。位元相同,但更為精簡。

兩種表示方式描述的是同一個摘要。兩者之間的選擇,純粹取決於消費者要貼上、記錄或傳輸哪一種格式。

如何在瀏覽器中產生 SHA-512 雜湊

為文字或本機檔案產生經驗證的 SHA-512 摘要,最快的方式是使用 Sha512 雜湊產生器。整個工作流程都在本機執行,因此不會上傳任何內容。

  1. 開啟 Sha512 雜湊產生器並選擇輸入模式:文字適用於 UTF-8 字串,或檔案適用於原始位元組。空白字元與行尾字元都是輸入的一部分,請依消費者預期的方式精確包含。
  2. 提供來源。在文字區域貼上文字,或選擇本機檔案。檔案模式會直接讀取位元組,不做字元集解碼、不做 MIME 嗅探,也不根據檔名進行任何轉換。以檔案方式雜湊的二進位檔案,就是以位元組方式進行雜湊。
  3. 產生摘要。該工具會針對您的精確位元組計算完整的 FIPS 180-4 SHA-512,並在文字模式中回報位元組數。
  4. 複製消費者所需的表示方式 - 128 字元的小寫十六進位或填補 Base64。兩者代表的是同一 64 個摘要位元組。
  5. 將每個字元與可信賴的參考值逐一比對。預期值必須透過經驗證的管道取得:NIST 出版物、軟體發行商的簽章發行說明、本機執行的 OpenSSL 命令,或協定規格本身。絕對不要從您正在檢查的同一個成品中複製預期值。

八個內建測試樣本 - 空序列、「abc」、FIPS 多區塊訊息、標點變體、UTF-8、任意二進位位元組以及常見散文 - 已與 NIST 及 RFC 來源進行比對,並使用 OpenSSL 獨立重現。另外有一項獨立斷言確認標準「abc」摘要的精確 Base64 編碼,因此該工具的兩種輸出格式不會產生偏差。

SHA-512 與其變體 - 哪些是、哪些不是完整的版本

有幾種演算法共用 SHA-512 壓縮例程的部分內容,但產生不同的摘要。若協定指定使用這些變體之一,完整 SHA-512 將是錯誤的工具,輸出結果也不會相符。

演算法輸出位元十六進位長度來源
SHA-25625664FIPS 180-4
SHA-38438496FIPS 180-4
SHA-512(完整)512128FIPS 180-4
SHA-512/22422456FIPS 180-4
SHA-512/25625664FIPS 180-4
HMAC-SHA-512512128RFC 2104 / RFC 4231

SHA-512/256 與 SHA-512/224 使用的是不同的初始雜湊值,而不只是較小的輸出視窗。手動將完整 SHA-512 截斷為 64 個十六進位字元,並不會等於真正的 SHA-512/256 結果。SHA-384 也使用不同的初始值與較少的回合數。HMAC-SHA-512 需要一把金鑰,並產生帶金鑰的鑑別標記;即使長度相同,其輸出也無法與原始 SHA-512 互換。

在與已發佈的校驗碼進行驗證時,請務必確認發行商實際指定的是哪一種演算法。標示為「SHA-512」的 128 字元十六進位值就是完整 SHA-512;以相同標籤標示的 64 字元十六進位值,幾乎可以確定其實是 SHA-512/256。

512 位元摘要在實際工作流程中的定位

選擇 SHA-512 而非較短的 SHA-2 成員,鮮少單獨考量安全性強度,因為 SHA-256 與 SHA-512 在 SHA-2 家族內部擁有相同的碰撞抗性聲明。選擇通常源自以下三種工作流程限制之一。

  • 協定強制要求 512 位元。部分 TLS 加密套件、憑證透明度記錄檔以及簽章演算法會明確指定 SHA-512。在這種情境下產生 SHA-256 摘要,無論在其他情境多麼強大,都無法滿足規格。
  • 與已發佈校驗碼比對以確保軟體完整性。部分 Linux 發行版與開源專案會在發佈時一併提供 SHA-512 校驗碼。參考值與成品必須使用相同的演算法,且消費者負責透過經驗證的管道取得參考值。
  • 長識別碼的比較。將 SHA-512 嵌入鏈結記錄檔、內容定址儲存系統或可重現的建置流程中,可提供強健的逐筆記錄指紋,有效避免意外碰撞。

若想深入了解同一工作流程中的輸出格式選擇與十六進位/Base64 取捨,請參閱 建立 SHA-512 雜湊並選擇您需要的輸出格式

SHA-512 無法做到的事

SHA-512 是單向的。除了對輸入空間進行暴力搜尋之外,沒有解密金鑰、沒有反運算,也沒有捷徑可以還原原始輸入。它同樣無法驗證來源。在選擇它時,有兩個重要的影響:

  • 鑑別需要金鑰或簽章。HMAC-SHA-512 將共用密鑰與摘要綁定,用於對稱式鑑別。公開金鑰簽章 - RSA、ECDSA 或 Ed25519 - 提供非對稱式的來源驗證。裸的 SHA-512 值無法證明是誰計算出來的。
  • 密碼儲存需要緩慢且加入鹽的函式。通用雜湊函式刻意設計得很快,這使得離線猜測的成本非常低。現代密碼資料庫會使用具記憶體硬度的函式,並為每個帳戶加入鹽:Argon2id、scrypt 或使用適當工作參數的 bcrypt。本瀏覽器工具不加入鹽、不進行延展、不附加帳戶內容,也不加入秘密胡椒;它只計算 FIPS 180-4 所指定的內容。

選擇更長的原始摘要並無法彌補這些缺陷。請挑選協定所需的建構方式:若雙方共用密鑰,使用 HMAC-SHA-512;若驗證者必須信任非對稱式公開金鑰,則使用簽章;若目標是驗證端的憑證儲存,則使用專用的密碼函式。

瀏覽器內實作的實際限制

基於瀏覽器的計算在單一緩衝區中最多接受 100 MB 的 UTF-8 文字或原始檔案位元組。100 MB 的上限是基於分頁回應速度的決定,並非 SHA-512 的限制;在理論上,底層演算法支援遠大於此的訊息大小。對於多 GB 的磁碟映像、封存檔或影片檔,請在本機執行串流實作,並在作業完成後比對完整輸出。

以下數項實作細節可避免常見錯誤對結果造成影響:

  • 文字模式會在雜湊前將輸入轉換為 UTF-8,並回報產生的位元組數,讓您能確認編碼步驟實際處理到的內容是否符合預期。
  • 檔案模式會直接對原始位元組進行雜湊,不解讀檔名、字元集或 MIME 類型。這可避免將二進位檔案錯誤地當成文字解碼、再對修改後的表示進行雜湊,而非對原始成品進行雜湊的常見錯誤。
  • 非同步作業識別採單調遞增,因此在作業中途變更輸入模式(文字切換到檔案,反之亦然),不會讓過時的結果覆蓋新狀態。
  • 複製控制項僅公開摘要表示。所選檔案的位元組絕不會進入剪貼簿,即使反覆複製也是如此。

空文字是有效的訊息,並非缺少計算。空 UTF-8 字串的標準 SHA-512 摘要以 cf83e135 開頭,並跑滿 128 個字元。請明確產生摘要,而不是讓空白欄位略過計算。

若您正在權衡各種選項,Base32 解碼:五位元群組如何重建 UTF-8 文字對此有詳細說明。