Bcrypt 雜湊與驗證
在瀏覽器中為密碼生成加鹽 bcrypt 雜湊,並用明文驗證已有雜湊。
在瀏覽器中為密碼生成加鹽 bcrypt 雜湊,並用明文驗證已有雜湊。 在瀏覽器中為密碼生成加鹽 bcrypt 雜湊,並用明文驗證已有雜湊。
在瀏覽器中為密碼生成加鹽 bcrypt 雜湊,並用明文驗證已有雜湊。
在瀏覽器中為密碼生成加鹽 bcrypt 雜湊,並用明文驗證已有雜湊。 在瀏覽器中為密碼生成加鹽 bcrypt 雜湊,並用明文驗證已有雜湊。
bcrypt 是 1999 年由 Niels Provos 和 David Mazieres 設計的自適應密碼雜湊函式。 與 MD5、SHA-256 這類快速摘要不同,bcrypt 有意消耗 CPU 時間:每次雜湊都會以可 配置的輪數執行 Blowfish 加密演算法,成本因子每增加 1,工作量就翻一倍。這種減速 正是讓離線字典攻擊和暴力破解變得昂貴的原因。正確的 bcrypt 實現還會把 128 位 隨機鹽嵌入輸出字串,因此同一密碼的兩次雜湊結果總是不同,彩虹表對它也毫無 用處。
一個 bcrypt 雜湊形如 $2b$12$e0.6kJ8a5X8u5Yp3qR5E0e9dF4z3W2c1v0b9n8m7l6k5j4h3g2f1。
開頭的美元符號分隔的各段攜帶演算法版本、成本和鹽:
$2b$ -- 演算法修訂版本。$2a$ 與 $2y$ 是較老的變體,對 8 位符號位缺陷的
處理略有不同;$2b$ 是當前推薦版本,也是 bcryptjs 的輸出格式。12 -- 成本因子。2^12 = 4096 輪金鑰擴充套件。每 +1 時間翻倍;互動式登入預設
10-12 即可,儲存憑據可用 12-14。在輸入框中輸入密碼,選擇成本因子,然後點選"生成雜湊"。生成的雜湊會出現在 輸出框中,並同時填入驗證欄位。要檢查已有雜湊,把雜湊貼上到驗證欄位,然後在 輸入框中輸入候選密碼:頁面會立即比對,顯示綠色對勾或紅色叉號。由於比對使用 bcrypt.compareSync 完成,它永遠不會暴露錯誤猜測的接近程度——每次嘗試都會完整 雜湊後才得出結果。
bcrypt 會把輸入截斷到 72 位元組:更長的密碼會被靜默截斷,因此前 72 位元組相同的 兩個密碼會被判定相等。如果需要更長輸入,先用 SHA-256(十六進位制)預雜湊,再對 摘要做 bcrypt。bcrypt 是刻意輕記憶體的演算法——它對 GPU 陣列的抵抗不如 Argon2 或 scrypt 這類記憶體硬演算法,但 4KB 表和 64 位元組狀態仍然讓廉價的 ASIC 破解缺乏吸引 力。全新系統通常更適合 Argon2id;bcrypt 依然是相容性極好、廣受支援的選項, 尤其適合無法提供 Argon2 的執行環境。本頁面完全在瀏覽器中執行:密碼和雜湊 永遠不會離開你的裝置,程式碼路徑(MIT/BSD 的 bcryptjs)已內置於 public/assets。