SHA-1 雜湊值是一個 160 位元的訊息摘要,顯示為恰好 40 個小寫十六進位字元或 28 個 Base64 字元,由 UTF-8 文字或本機檔案的精確位元組計算而得。它由 NIST 安全雜湊標準 (FIPS 180-4) 所定義,但僅在為了與發佈 SHA-1 校驗和的舊系統相容時仍有用途——例如下載頁面、檔案目錄或舊版軟體整合。當您需要驗證檔案或文字字串是否符合已發佈的 SHA-1 值時,您會產生本機摘要,並透過信任的通道逐一比對每個字元。「Sha1 雜湊產生器」讓您可以完全在瀏覽器中完成此作業,無須上傳輸入內容,同時明確警告 SHA-1 眾所周知的碰撞弱點。

SHA-1 透過將輸入填補為 512 位元的倍數、將其分割為區塊,並透過每區塊八十個回合更新五個 32 位元的狀態字來處理輸入。最終的 160 位元狀態即為摘要。文字模式會在雜湊之前將可見字串編碼為 UTF-8,這對於重音字母、表情符號和非拉丁文字非常重要,因為單一字元可能佔用數個位元組。檔案模式則會精確地對讀取的原始位元組進行雜湊,忽略檔名、修改時間和瀏覽器的 MIME 標籤。空白的文字欄位是有效的訊息,並會產生眾所周知的 SHA-1 值 da39a3ee5e6b4b0d3255bfef95601890afd80709。行尾、空格和最後的換行都會參與計算,因此外觀相似的輸入實際上可能會產生不同的值。

此工具專為單一特定任務而設計:產生舊系統所需的 SHA-1 摘要。它不會上傳您的檔案或文字,在 100 MB 瀏覽器限制內於本機處理所有作業,並同時提供十六進位和 Base64 表示法。對於新的安全敏感工作——例如數位簽章、憑證決策或密碼儲存——由於存在碰撞攻擊(攻擊者可以在實際情況下建構具有相同摘要的不同內容),SHA-1 並不安全。針對此類用途,請優先採用 SHA-256 或 SHA-512,並確保校驗和透過經驗證的管道發佈。

generate sha1 hash
在瀏覽器中為舊版校驗和產生 SHA-1 雜湊值

何時應使用 SHA-1,何時應避免

僅在舊系統明確要求用於校驗和驗證時使用 SHA-1。常見的情境包括:

  • 針對檔案庫或軟體廠商發佈的 SHA-1 校驗和,驗證已下載的檔案。
  • 針對儲存在舊資料庫或設定檔中的 SHA-1 摘要,比對文字字串。
  • 與仍針對非安全敏感的資料完整性檢查使用 SHA-1 的第三方系統整合。

在涉及安全的任何情境中,請避免使用 SHA-1,例如:

  • 數位簽章或憑證授權單位(請改用 SHA-256 或 SHA-512)。
  • 密碼儲存(請使用具備鹽值且刻意耗能的密碼雜湊機制,例如 Argon2id 或 bcrypt)。
  • 對抗性的檔案核准或防竄改保護(SHA-1 的碰撞弱點使其不適用於此)。

下表摘要說明 SHA-1 與現代替代方案之間的主要差異:

特性 SHA-1 SHA-256 SHA-512
摘要大小 160 位元 (40 個十六進位字元) 256 位元 (64 個十六進位字元) 512 位元 (128 個十六進位字元)
安全性狀態 碰撞已被破解 目前使用安全 目前使用安全
使用情境 僅限舊版校驗和 現代安全性與校驗和 現代安全性與校驗和
輸入處理 UTF-8 文字或原始位元組 UTF-8 文字或原始位元組 UTF-8 文字或原始位元組
處理位置 瀏覽器 (無上傳) 瀏覽器 (無上傳) 瀏覽器 (無上傳)

如何逐步產生 SHA-1 雜湊值

請依照下列步驟,使用 Sha1 雜湊產生器 來產生 SHA-1 雜湊值:

  1. 選擇輸入模式:根據您要雜湊的是字串或本機檔案,選擇「Text」或「File」。對於文字,請貼上或輸入精確內容,包括所有空格、行尾和最後的換行。對於檔案,請點選「Choose File」並選擇一個最大 100 MB 的檔案。
  2. 產生摘要:點選「Generate SHA-1」按鈕。工具會在您的瀏覽器中本機處理輸入,並同時以小寫十六進位和標準 Base64 格式顯示 160 位元的摘要。
  3. 選擇所需的表示法:根據舊系統的預期,複製十六進位或 Base64 摘要。十六進位是 SHA-1 校驗和最常見的格式。
  4. 逐一比對每個字元:透過信任的通道,手動比對產生的摘要與已發佈的 SHA-1 校驗和。即使只有一個字元不符,也表示輸入不相符。
  5. 若可行,請遷移至更強的演算法:若您掌控使用端系統,請將其更新為使用 SHA-256 或 SHA-512,並透過經驗證的管道發佈新的校驗和。

為何 UTF-8 編碼對文字輸入至關重要

當您雜湊文字時,Sha1 雜湊產生器會在處理前將其編碼為 UTF-8。此區別對於非 ASCII 字元、表情符號,以及像西里爾字母或中文這類文字至關重要。例如,字元「é」在 UTF-8 中佔用兩個位元組,而「e」只佔用一個位元組。若您對字串「café」進行雜湊,卻意外省略了重音,產生的摘要將會完全不同。同樣地,像「🔑」這類表情符號各佔用四個位元組,因此即使缺少或新增一個表情符號,也會產生截然不同的 SHA-1 雜湊值。

另一方面,檔案模式會精確地對從檔案讀取的原始位元組進行雜湊,而不進行任何編碼解讀。這就是為什麼此工具會警告您必須提供精確的輸入,切勿標準化空白字元或變更位元組序列。若舊系統預期使用某檔案的 SHA-1 雜湊值,請確保該檔案與原始檔案逐位元組完全相同,包括其行尾 (LF vs. CRLF) 和任何結尾的換行。

如何安全地驗證 SHA-1 校驗和

若要安全地驗證 SHA-1 校驗和,請遵循下列最佳實務:

  • 使用信任的通道:從安全且經驗證的來源取得已發佈的 SHA-1 校驗和,例如官方廠商網站或經驗證的版本公告。切勿在未經獨立驗證的情況下,信任透過電子郵件或第三方論壇發送的校驗和。
  • 逐一比對每個字元:SHA-1 摘要區分大小寫,必須完全相符。即使只有一個字元不正確,也表示輸入並非完全相同。請使用文字編輯器的「compare」之類的工具來突顯差異。
  • 檢查輸入模式:確認您雜湊的輸入類型與已發佈校驗和的來源一致。若校驗和是從檔案產生的,請雜湊檔案;若校驗和是從文字產生的,請雜湊精確的文字字串。
  • 了解其限制:相符的 SHA-1 校驗和僅能確認輸入位元組與原始檔案相同,但無法證明作者身分、真實性或安全性。針對這些用途,請使用更強的演算法,例如 SHA-256 或 SHA-512。

例如,若軟體廠商為可下載的安裝程式發佈了 SHA-1 校驗和,您會進行下列作業:

  1. 將安裝程式檔案下載到您的本機電腦。
  2. 使用 Sha1 雜湊產生器對該檔案進行雜湊。
  3. 複製產生的十六進位摘要,並與已發佈的校驗和逐字元比對。
  4. 若兩者相符,則該檔案很可能完好無損 (假設廠商的校驗和值得信賴)。

需要注意的陷阱

產生 SHA-1 雜湊看似簡單,但微小的疏忽可能導致摘要不符。請避免下列常見錯誤:

  • 標準化空白字元:請勿修剪空格、將定位字元轉換為空格,或變更行尾。每個位元組——包括不可見的字元——都會影響結果。
  • 使用錯誤的輸入模式:在校驗和是從文字產生時卻對檔案進行雜湊 (反之亦然),會產生不同的摘要。請務必確認校驗和是從檔案或文字字串產生。
  • 忽略大小寫敏感性:SHA-1 十六進位摘要區分大小寫。若已發佈的校驗和使用大寫字母,請在比對前將產生的摘要轉換為大寫 (或使用工具提供的「Uppercase Output」選項,若有的話)。
  • 假設其安全性:切勿將 SHA-1 用於安全敏感的工作,例如密碼儲存、數位簽章或憑證驗證。其碰撞弱點使其不適用於這些用途。
  • 略過信任的通道:請務必從安全且經驗證的來源取得已發佈的校驗和。與未經驗證的校驗和進行比對是毫無意義的。

舉例來說,若您對帶有結尾換行的文字「hello world」進行雜湊,產生的 SHA-1 摘要將與相同但不含換行的文字不同。同樣地,對 UTF-8 字串「café」進行雜湊所產生的結果,會與「cafe」不同,因為帶重音的「é」佔用兩個位元組。請務必提供精確的輸入,以確保摘要符合預期值。

若 SHA-1 不足時該怎麼做

若您正在進行新專案,或能掌控使用端系統,請從 SHA-1 遷移至更強的演算法,例如 SHA-256 或 SHA-512。這些演算法不易遭受碰撞攻擊,且受到現代系統的廣泛支援。以下是進行切換的方法:

  • 更新校驗和演算法:在您的工作流程中以 SHA-256 或 SHA-512 取代 SHA-1。例如,若您要為可下載的檔案發佈校驗和,請改為產生並發佈 SHA-256 摘要。
  • 使用經驗證的通道:透過 HTTPS 或其他安全且經驗證的管道發佈校驗和,以防止竄改。請避免使用電子郵件或未加密的 HTTP 等明文管道。
  • 教育相關人員:向使用者或團隊成員說明此變更及其必要性。並提供產生與驗證新校驗和的明確指示。
  • 善用瀏覽器工具:使用 SHA256 雜湊產生器 或 Sha512 雜湊產生器,即可像使用 SHA-1 一樣,在瀏覽器中本機產生現代摘要。

針對密碼儲存,請完全避免使用通用型雜湊演算法。請改用具備鹽值且刻意耗能、能抵禦暴力破解攻擊的專用密碼雜湊機制,例如 Argon2id、scrypt 或 bcrypt。這些機制會加入鹽值以防止彩虹表攻擊,且由帳號系統實作,而非由獨立的雜湊產生器實作。

SHA-1 內部運作原理

SHA-1 是由 NIST 安全雜湊標準 (FIPS 180-4) 所定義的密碼雜湊函式。它以 512 位元區塊處理輸入,並透過每區塊八十輪的運算更新五個 32 位元狀態字 (A、B、C、D、E)。以下是流程的簡化說明:

  1. 填補:輸入會被填補至 512 位元的倍數長度。填補內容包括一個 "1" 位元,加上足夠的 "0" 位元,再加上原始訊息長度的 64 位元表示。
  2. 初始化:五個狀態字會被初始化為標準所定義的固定常數。
  3. 處理區塊:填補後的訊息會被分割成 512 位元的區塊。針對每個區塊,演算法會執行八十輪運算,使用位元運算、模加法與預定義常數來更新狀態字。
  4. 最終摘要:處理完所有區塊後,五個狀態字會被串接起來形成 160 位元的摘要,接著以 40 個十六進位字元或 28 個 Base64 字元顯示。

SHA-1 的安全性在 2005 年遭到突破,當時研究人員展示了一種理論上的碰撞攻擊。到了 2017 年,實際的碰撞攻擊已被展示出來,證明 SHA-1 在密碼用途上已不再安全。這就是為什麼現代系統改用 SHA-256 或 SHA-512,它們擁有更大的摘要長度與更複雜的內部結構以抵禦攻擊。

如需進一步了解 SHA-1 的設計與安全性考量,請參閱官方的 NIST FIPS 180-4 標準或 RFC 6194 安全性考量。

若想深入了解,請參閱 在 Windows CMD 中使用 SHA256 雜湊:指令與交叉驗證。

若想深入了解,請參閱 建立 SHA-512 雜湊並選擇所需的輸出格式。