JavaScript 中的密碼強度檢查完全在瀏覽器中執行,透過計算 Unicode 碼點、分類出現的字元群組,並標記簡單的重複或連續模式,再指派一個五級標籤。輸出結果只是協助你挑選更好密碼的指引,並非保證該值無法被破解,因為攻擊者會先測試外洩語料庫、字典、鍵盤走勢和個人事實,才會嘗試所有字元組合。本機的強度計使用碼點而非 UTF-16 單位來計算長度,因此一個表情符號會被視為一個字元,並回報涵蓋小寫、大寫、數字、符號、空白字元和非 ASCII 字元的描述性字元群組計數,而不強制特定的組成方式。它也會偵測狹窄的模式,例如重複三次以上的一到四個碼點區塊,以及四個字元的單調遞增或遞減序列,並在出現這類模式時將分數上限設為特定值。同一段用來標記不佳選擇的程式碼,也可以重新用於在新密碼提交到網站、密碼管理庫或目錄之前進行快速的預先檢查。

JavaScript 密碼強度檢查實際測量的是什麼
瀏覽器端的密碼強度檢查是一小段用戶端驗證程式,會在使用者輸入時回應,而無須聯繫伺服器。最簡單的 JavaScript 實作會從輸入欄位讀取密碼字串、計算其長度、檢查是否至少包含每個常見群組的一個字元,然後繪製一個帶有標籤的彩色長條。這類強度計作為第一印象很有用,但它們通常依賴猜測以位元為單位的熵,或是附加一個假的「破解所需年數」數字,兩者對於人類挑選的密碼來說都不可靠。
Password Strength Checker 讓這個迴圈保持透明。它計算 Unicode 碼點而非 UTF-16 單位,因此單一表情符號會如使用者預期地被視為一個字元。它會回報出現的廣義字元群組數量——小寫、大寫、數字、符號、空白字元和非 ASCII 字元——作為描述性信號,而非評分規則。它不要求任何特定的組成方式,因為強制規定往往會將使用者推向像 P@ssw0rd1 這類仍容易猜測的可預測替代方式。
這個強度計實際執行的兩項檢查是可以解釋的。第一項會尋找重複至少三次、最多四個碼點的短區塊,這能抓到像 aaaaaa、abcabcabc 或 mumumu 這類的值。第二項會尋找以一為單位遞增或遞減的四個碼點序列,這能抓到像 abcd、1234 或 wxyz 這類的值。當任一模式觸發時,分數會被限制為 Fair,避免一個很長但有規律的字串獲得較高的標籤。
本機密碼強度檢查工具在瀏覽器中的運作方式
實作就放在你輸入密碼的頁面上。輸入欄位預設為隱藏,只有在你按下「Show」時才會顯示,這能在你檢視結果時盡量避免旁人窺看。內容不會上傳:沒有背景擷取、沒有遠端雜湊檢查、也沒有分析追蹤,因此該值從不離開這個分頁。
當你貼上候選密碼時,檢查工具會依據五個有明文記載的分級來評估。空白輸入得零分。少於八個碼點的值評為 Weak。八到十四個碼點的值評為 Fair,而符合簡單重複或連續模式的值,無論長度為何,也都會被限制為 Fair。十五到十九個碼點且無規律的值評為 Good,二十個或以上碼點且無規律的值評為 Strong。這些是優先考量長度以符合現行 NIST 指引的回饋規則,並非承諾任何長字串就一定安全。
用以鎖定已發布分數邊界的八個固定測試值為:空白、短、連續、重複、十四個字元、一個十一個字元的混合值、一個十九個字元的詞組,以及一個二十八個字元的密碼短語。它們經過挑選,使得分界恰好落在說明文件所述的位置,並讓強度計對相同輸入給出穩定、可重現的答案。
在 JavaScript 中執行本機密碼強度檢查
以下步驟使用本機的 Password Strength Checker,並假設你已使用現代瀏覽器開啟該頁面。不需要建置步驟、不需要 npm install,也不需要 Node.js 處理程序。
- 在瀏覽器中開啟 Password Strength Checker,並點進輸入欄位。該欄位是標準的密碼輸入欄,因此值預設會被遮罩,且從不離開你的裝置。
- 輸入或貼上準備使用的密碼。稍停一下,閱讀長度計數器、描述性字元群組計數、模式旗標,以及強度計在欄位旁顯示的每一項建議。
- 如果欄位在視覺上拒絕了你的輸入——例如空白或表情符號意外消失——請切換「Show」按鈕,在你調整之前先確認你所輸入的確切碼點。
- 閱讀五級標籤。如果強度計顯示 Weak 或 Fair,請把建議當成待辦清單:延長長度、去除明顯模式,或從全新的隨機來源重新產生。
- 一旦強度計顯示 Good 或 Strong,請在目的服務上完成驗證。確認該服務接受這些字元、執行其本身的封鎖清單或外洩檢查,並啟用多因素驗證,然後才算這個帳號真正受到保護。
每個步驟都發生在瀏覽器分頁中。強度計不會儲存該值、不會記錄它,也不會將它送到外洩語料庫。唯一的留存方式是你自己建立的,例如密碼管理器的項目或離線保存的書面筆記。
解讀分數區段
下表是強度計實際套用的精確門檻。它們是回饋規則,並非保證較高分段中的值就具有抗攻擊能力,而且它們刻意設計為可解釋的,而非機率性的。
| Score band | Length in code points | Pattern cap | What it means |
|---|---|---|---|
| Zero | empty | no | No input to evaluate. |
| Weak | 1–7 | no | Too short to be useful; add length first. |
| Fair | 8–14 | yes at any length | Acceptable as a starting point but vulnerable to dictionary attacks. |
| Good | 15–19, no pattern | no | Long enough for single-factor accounts when the value is unique. |
| Strong | 20+ | no | Long enough for higher-value accounts; still pair with MFA and a blocklist check. |
根據 NIST SP 800-63B,當密碼驗證是唯一因素時,短於十五個字元的密碼會被視為薄弱。Good 與 Strong 區段反映了該指引,而 Weak 與 Fair 區段則從相反方向反映它。任何特定輸入的確切數字來自該工具;上表記錄的是邊界,而非個別候選的運算結果。
為何模式偵測刻意設計得很狹窄
這個強度計只標記兩種模式。它會尋找重複至少三次、最多四個碼點的區塊,以及尋找四個字元的單調序列。除此之外——長於四個字元的鍵盤走勢、名言佳句、歌曲歌詞、姓名、出生日期、語言字典詞彙,以及先前外洩的密碼——對本機檢查來說都是看不見的。乾淨的「No pattern」結果只代表這兩項檢查沒有觸發。
這是一個刻意的選擇。真實的攻擊者並不會列舉所有字元組合。他們會從外洩語料庫、字典、特定服務的單字表、常見鍵盤路徑、個人事實,以及在已洩漏資料上訓練出來的機率模型下手。為使用者挑選的密碼估計熵確實很困難,而 NIST 也指出,這類估計對人類輸入往往不可靠。與其捏造一個數字,這個強度計回報長度與一項狹窄的模式旗標,讓你能親眼驗證。
若要更嚴謹的驗證,生產系統應該將完整的候選密碼與一份當前常見、預期與已遭破解值的封鎖清單進行比對。本機頁面不會下載任何這類資料庫,也不會將部分雜湊送到第三方外洩服務,因此它無法告訴你該值是否曾出現在外洩事件中。即使本機強度計顯示為 Strong,仍請務必遵循帳號提供者的外洩警告。
超越本機強度計:在你信任一個值之前還應加上什麼
將本機強度計視為快速的預先檢查,而非最終定論。真正能保護帳號安全的做法組合,就是 NIST 指引和 OWASP Authentication Cheat Sheet 一再重述的那一套:
- 使用密碼管理器產生一組獨特的值並存放在其中,而非在多個網站間重複使用。在不啟用同步的情況下於 Chrome 本機產生強密碼的逐步說明,會逐步帶領你完成一個完全在本機進行的瀏覽器端產生流程。
- 在正式採用前,將該值與帳號提供者的封鎖清單或外洩檢查進行比對。本機強度計明確不會執行此步驟。
- 為電子郵件、金融、雲端和管理員帳號啟用多因素驗證。當服務支援時,能抗網路釣魚的通行金鑰是最強的選項。
- 在密碼遭到重複使用、外洩或懷疑遭到破解時予以更換,而非依據任意排定的時程。
- 在伺服器端,使用合適的加鹽密碼雜湊函式(例如 Argon2id、scrypt 或 bcrypt)來儲存密碼,而非使用快速的 SHA 或可逆加密。關於用戶端雜湊流程的實用參考,請參閱隨 SHA-256 雜湊工具一同發布的相關 JavaScript Web Crypto 逐步說明。
空白字元與 Unicode 能支援好記的密碼短語,但目的服務必須一致地接受並正規化它們。如果目的端拒絕空白字元或表情符號,強度計仍會告訴你長度與模式狀態,但該值無法通過伺服器上的帳號建立步驟。
在 JavaScript 中將一切組合起來
JavaScript 中的密碼強度檢查可以簡單到僅由幾個碼點、一個模式旗標和一個長度區段組成。本機的 Password Strength Checker 正是實作了這條管線:計算 Unicode 碼點、分類字元群組、套用狹窄的模式測試,並輸出五個標籤之一的結果。由於運算在你的分頁中執行,你可以嘗試各種值、看到強度計在下一個按鍵時回應,並調整候選值直到標籤顯示 Good 或 Strong。標籤是指引而非認證,因此最後三項檢查——管理器的唯一性、服務封鎖清單以及多因素驗證——才是真正保護帳號安全的要素。