SM3 雜湊生成器

完全在瀏覽器中計算文本或檔案的 SM3 摘要 —— GB/T 32905-2016,中國國家密碼雜湊標準。普通 SM3 或帶金鑰的 HMAC-SM3,hex 或 Base64 輸出,並有 SHA-256 並排對比通道。不會上傳任何資料。
演算法摘要
SM3–
SHA-256 (對比通道,僅文本來源)–
詳情–
命令列交叉驗證 —— 本頁對檔案給出的摘要與 openssl dgst -sm3 file.bin(OpenSSL 1.1.1+)及 gmssl dgst -sm3 file.bin 逐位元組一致。HMAC-SM3 用文本金鑰時:openssl dgst -sm3 -hmac <key>。
自檢
用 GB/T 32905-2016 官方附錄 A 向量、GB/T 15852.2(ISO/IEC 9797-2)HMAC-SM3 向量、一次 1000 位元組分塊增量執行、兩個示例池、對照瀏覽器自帶編碼器的 Base64 通道,以及反向路徑(非法 hex 金鑰必須被拒絕)重跑本頁引擎。不會向任何地方傳送資料。
什麼是 SM3?
一句話:SM3 是中國國家標準化機構的密碼雜湊 —— 與 SHA-256 同屬一個結構家族的 256 位 Merkle–Damgård 雜湊,但擁有自己的初始值、輪常數、布林函式和 68 字的訊息擴充套件,釋出為 GM/T 0004-2012,後為 GB/T 32905-2016。
SM3 與 SHA-256 一覽
方面SM3SHA-256
摘要 / 分組 / 字大小256 / 512 / 32 位256 / 512 / 32 位
壓縮輪數6464
訊息擴充套件W[0..67] + 派生的 W'[0..63],P1 置換W[0..63],帶 σ0/σ1 旋轉
輪常數兩個常數 T0..15=0x79CC4519、T16..63=0x7A879D8A,按 j 旋轉64 個常數 K[0..63]
布林函式FF/GG 在第 16 輪切換全程 Ch/Maj
位元組序大端大端
釋出時間2010 年(GM/T 0004-2012;GB/T 32905-2016)2001 年(FIPS 180-2)
國際地位已納入 ISO/IEC 10118-3:2018FIPS 180-4

同一副骨架,不同的肌肉:兩種演算法都把訊息切成 512 位分組,在八個 32 位暫存器上跑 64 輪混合,但每個常數、每個旋轉量與訊息擴充套件步驟都不同,因此對同一輸入產生完全無關的摘要。SM3("abc") 是 66c7f0f4...8f4ba8e0,而 SHA-256("abc") 是 ba7816bf...f20015ad —— 用“示例”按鈕試試兩者。

“國家標準”意味著更安全嗎?

不 —— 那也不是它的使命。SM3 提供與 SHA-256 相當的安全性:256 位摘要,沒有已知的可行碰撞或原像攻擊。SM3 存在的理由是套件獨立性與合規:中國商用密碼(“SM”系列)法規要求在受認證的行業 —— 銀行、政務、電信基礎設施 —— 使用國產套件,讓整條技術棧(雜湊、簽名、密碼)都置於統一的國家標準流程而非國外標準之下。在這個語境之外,SHA-256 與 SM3 強度上可以互換;當你的對手方、監管機構或協議(例如帶 RFC 8998 SM 密碼套件的 TLS 1.3)要求時,選 SM3。

SM3 在 SM 套件中的位置
  • SM3(本頁)—— 雜湊。也是 SM2 簽名內部的摘要(ZA 值)和 SM2 加密的 KDF。
  • SM4 —— 128 位分組密碼(可理解為“國產版 AES”),ECB/CBC 見本族的 SM4 頁面。
  • SM2 —— sm2p256v1 曲線上的橢圓曲線簽名與加密演算法,構建在 SM3 之上。
  • SM9 —— 標識密碼:你的郵箱地址就是你的公鑰。
常見錯誤
  • 用 SM3 雜湊口令。SM3 和 SHA-256 一樣是快速通用雜湊 —— GPU 上每秒可猜數十億次。口令儲存請用 口令雜湊生成器裡的 bcrypt、scrypt、Argon2id 或 PBKDF2。
  • 以為舊式 C1C2C3 順序在這裡有影響。密文順序是 SM2 的話題;SM3 沒有這種講究,其輸出永遠是 32 位元組。
  • 混淆 GM/T 0004-2012 與 GB/T 32905-2016。同一演算法、同一測試向量 —— GM/T 是行業標準釋出文本,GB/T 是國家標準。ISO/IEC 10118-3:2018 同樣收錄了它。
  • 信任,但要驗證。本頁自檢會重放標準自帶的附錄向量;如果它沒有顯示“0 失敗”,就不要相信輸出。
常見問題

OpenSSL 裡有 SM3 嗎?有 —— OpenSSL 1.1.1 及更高版本:openssl dgst -sm3 file,HMAC 走 -hmac。GmSSL(中國分支)支援得更早。本頁兩者都不需要:演算法就在你的瀏覽器裡執行。

HMAC-SM3 是幹什麼用的?訊息認證:一種還能證明“是誰發的”的摘要,因為只有持有共享金鑰的人才能算出它。標準化於 GB/T 15852.2 / ISO/IEC 9797-2。金鑰可為任意長度;超過 64 位元組會先做一次雜湊。

為什麼檔案通道不顯示 SHA-256 對比?對比用的是瀏覽器內建的 WebCrypto 一次性摘要,它要求整個輸入都在記憶體裡 —— 文本沒問題,200 MB 分塊流入的檔案不行。SM3 本身是增量計算的,在本頁沒有這個限制。

能拿到 Base64 形式的摘要嗎?能 —— 在“輸出格式”裡選。每個結果的兩條通道都可以複製,或下載成一份小文本報告。