SHA-256 可以解密嗎?
不能,它在設計上就不可逆。聲稱能「SHA256 解密」的網站做的是彩虹表反查:事先把海量常見字串算好存進資料庫裡,你給一個雜湊值,它去查有沒有對應記錄。查得到只說明你的原文是個常見字串;隨機長密碼或加鹽之後的密碼,任何這類網站都查不出來。
支援任意檔案,最大 50 MB
sha256sum 那種「雜湊值 + 空格 + 檔案名稱」的整行,會自動只取雜湊值部分。和 MD5 一樣,嚴格說不算。加密是可逆的,有金鑰就能還原原文;SHA 是單向雜湊函數,把任意長度的輸入壓成固定長度的摘要,過程中資訊已經遺失,不存在「還原」這一步。中文習慣把它叫「SHA256 加密」,本頁沿用這個說法,指的是計算 SHA-256 值。所以也不存在「SHA256 解密」——那類網站做的是彩虹表反查,原理在 MD5 線上加密 頁裡寫得更細。
不是「位數更長所以更安全」這麼簡單,而是前兩個已經被實際攻破了。建構兩個 MD5 相同但內容不同的檔案,一般電腦幾秒鐘就能做到;SHA-1 在 2017 年被 Google 的 SHAttered 實際碰撞,2020 年更進一步做到了選擇前綴碰撞,成本降到幾萬美元。這意味著有人可以準備一對內容不同、雜湊值卻相同的檔案,讓你驗證通過卻拿到另一份。SHA-256 目前沒有已知的實用碰撞方法,也是 TLS 憑證、新版本 Git、軟體發布驗證普遍採用的演算法。
這是最常見的誤用。SHA-256 的設計目標是快——現代顯示卡每秒能算幾十億次,正好方便攻擊者暴力窮舉。儲存使用者密碼要用 bcrypt、scrypt 或 Argon2 這類慢雜湊:它們內建加鹽(每個使用者一個隨機鹽,防止彩虹表和撞庫),並且可以調節計算成本,硬體變快就把成本調高。給 SHA-256 手工加鹽能擋住彩虹表,但擋不住針對單一帳號的暴力破解。
三個都屬於 SHA-2 家族,區別是內部字組長度和輸出長度。SHA-256 用 32 位元運算,相容性最好,是絕大多數場景的預設選擇。SHA-512 用 64 位元運算,在 64 位元 CPU 上往往反而更快,輸出也更長。SHA-384 是 SHA-512 截斷到 384 位元的版本,常見於部分憑證和 TLS 套件。沒有特殊要求就用 SHA-256——你要比對的那個值多半也是它。
不能,它在設計上就不可逆。聲稱能「SHA256 解密」的網站做的是彩虹表反查:事先把海量常見字串算好存進資料庫裡,你給一個雜湊值,它去查有沒有對應記錄。查得到只說明你的原文是個常見字串;隨機長密碼或加鹽之後的密碼,任何這類網站都查不出來。
涉及安全一律用 SHA-256,MD5 和 SHA-1 都已被實際碰撞,不能再用來防竄改或做簽章。只有在對方明確要求 MD5 時才用它——比如舊系統給出的驗證值就是 MD5。需要算 MD5 可以用本站的 MD5 線上加密,那一頁寫了「MD5 解密」網站的真實原理。
不能用於任何安全用途。它 2017 年就被實際碰撞,瀏覽器和憑證機構早已全面棄用。這裡仍然保留 SHA-1,是因為還有不少舊系統、舊儲存庫和舊文件給出的驗證值是 SHA-1,你需要一個能算出來對照的工具,而不是因為它還安全。
把檔案拖進上面的上傳框,在「驗證比對」欄貼上發布方給出的雜湊值,點計算。一致會顯示綠色提示,不一致顯示紅色。如果你貼上的雜湊值長度對不上目前的演算法,頁面會提示你可能該換哪一個——官方給的是 SHA-1 而你選了 SHA-256,是最常見的一種對不上。
多半兩邊都沒錯,是輸入不同。最常見的三個原因:文字末尾多了一個換行;換行字元是 \r\n 還是 \n(Windows 記事本和 Linux 不一樣);以及非 ASCII 字元的編碼不是 UTF-8。本頁對文字按 UTF-8 編碼、不額外補換行。要排除這類差異,最穩的辦法是直接算檔案而不是貼上文字。
瀏覽器的 WebCrypto API 只能對一整塊資料做摘要,沒有提供分段串流計算的介面,所以檔案要先整個讀進記憶體。50 MB 是一個在手機上也不至於卡住的上限。更大的檔案建議用系統內建的命令列工具:Windows 用 certutil -hashfile 檔案名稱 SHA256,macOS 和 Linux 用 shasum -a 256 檔案名稱。
沒有區別,只是同一串十六進位的兩種寫法,比對時不區分大小寫。本頁預設輸出小寫(也是 sha256sum、shasum 這些命令列工具的習慣),勾選後可以切成大寫。驗證比對時會自動忽略大小寫差異,不用手工統一。
不會。計算用的是瀏覽器內建的 WebCrypto API,檔案讀進記憶體、算完直接顯示,全程沒有一個位元組離開你的裝置。頁面載入完之後斷開網路,這個工具照常可用——這是最直接的驗證方法。詳見隱私權政策。