在 JavaScript 中檢查密碼長度最直接的方式,是使用內建的 .length 屬性,它會回傳字串中 UTF-16 字碼單位的數量 — 因此像 "Hunter2!" 這種純 ASCII 密碼會回報 8,但像 "😀" 這種表情符號會被計為 2,因為它位於輔助平面。對於使用者自行設定的密碼,現行 NIST 指引認為,當密碼是唯一的身份驗證因素時,任何短於 15 個字元的密碼都屬於強度不足,這代表簡單的 if (password.length >= 8) 檢查在現代標準下過於寬鬆。如果想在不撰寫完整驗證器的情況下,取得透明且符合 NIST 標準的長度、字元多樣性與明顯模式的審查結果,可以將該值送入 Password Strength Checker,它會計算 Unicode 字碼點(因此表情符號算作一個)、套用已公布的長度區間,並標記重複或連續的片段 — 而且全程都在你的瀏覽器中執行。你所看到的標籤僅是回饋,而非認證,因此請務必搭配密碼管理工具、服務業者的封鎖清單檢查,以及多因素驗證一起使用。

為什麼密碼長度是首要衡量指標
長度是與抵抗線上猜測攻擊能力關聯性最強的單一屬性,出自 NIST SP 800-63B。密碼越長,攻擊者需要測試的候選項目就越多,基於外洩資料庫的查找成本也會提高。大多數現代政策文件都趨向於:為了相容舊有系統,最低長度為 8 個字元;而當密碼單獨使用時,建議目標為 15 個字元以上。一個混合大小寫、數字與符號的短密碼,仍然比一長串字典詞組的密碼更容易被猜中,因為攻擊者在嘗試所有字元排列組合之前,會優先使用常見替換、外洩詞組,以及特定服務相關的字詞。
針對 JavaScript 的實務而言,這代表長度檢查必須對應到目標服務實際接受的值。如果你的應用程式會去除空白字元、統一 Unicode 編碼,或拒絕特定字元類別,那麼你在用戶端測得的位元組數,可能與伺服器實際儲存的內容不符,因此它只是一個參考指標,而非保證。當你需要與真實驗證器相符的回饋時,本機的 Password Strength Checker 套用了相同的 NIST 對齊長度區間,並加入透明的模式標記,這讓它在把密碼送交註冊頁面前,成為一個有用的第二意見來源。
JavaScript 內建方式:.length、字碼單位與字碼點
最便宜的檢查方式是 password.length。但要注意的是,「一個」究竟代表什麼:
- 對於 ASCII 字元,password.length 就是字元數。
- 對於 U+FFFF 以上的 BMP 字元(大多數表情符號及許多 CJK 字碼點),每個字元都是一對 UTF-16 代理對,因此會被計為 2。
- 組合記號與 ZWJ 序列可能產生與人類閱讀字串方式不一致的計數結果。
以下範例是 JavaScript 中用於最小長度檢查的標準寫法:
function isValidLength(password) { return password.length >= 8; }
如果你需要將表情符號視為一個單位的 Unicode 感知計數,可以將字串展開為字碼點陣列:
function codePointLength(str) { return [...str].length; }
呼叫 "😀password".length 會回傳 10,因為該表情符號是一對代理對;而 [..."😀password"].length 則會回傳 9,因為該表情符號是一個字碼點。如需結合長度、空值處理與模式檢查的更完整用戶端驗證器,且無需伺服器往返,請參考 Check Password Strength in JavaScript Without a Server 指南。
如何使用 Password Strength Checker 進行長度與模式檢視
Password Strength Checker 是一個本機工具,它採用相同的長度邏輯,並加入透明的模式檢查。當你想在把候選密碼送交實際註冊表單,或交給密碼管理工具之前,快速取得第二意見時,可以使用它。
- 將候選密碼輸入或貼到輸入欄位;在按下 Show 之前,內容都會保留在本機且隱藏不顯示。
- 檢視回報的長度、描述性的字元群組計數(小寫、大寫、數字、符號、空白字元、非 ASCII),以及工具所產生的模式標記與各項建議。
- 套用工具的指引:優先採用由密碼管理工具產生的唯一值,或一個又長又獨特的詞組;確認目標服務接受這些字元;將完整值與服務的封鎖清單進行比對;並在帳號上啟用 MFA。
你所看到的分數來自一組公開的文件化規則,而非公開的私有模型,因此你可以清楚了解某個值為何被限制上限或被接受。由於稽核在你的瀏覽器中執行,內容不會被上傳、儲存,或與遠端外洩資料庫比對。
分數區間的真正意涵
此檢查器使用已公布的長度區間,並與 NIST 對齊的回饋一致:
| 以字碼點計算的長度 | 無模式 | 含有模式 |
|---|---|---|
| 空 | 弱 (0) | 弱 |
| 1 至 7 | 弱 | 弱 |
| 8 至 14 | 普通 | 上限為普通 |
| 15 至 19 | 良好 | 上限為普通 |
| 20 以上 | 極佳 | 上限為普通 |
在閱讀此表格時,有幾個細節值得注意:
- 長度是以 Unicode 字碼點計算,因此一個含表情符號的 15 字元詞組會被視為 15,即使 JavaScript 的 .length 會顯示 16 或 17。
- 字元群組計數僅供描述參考。工具並不要求一定要有大寫、數字或符號,因為強制的組成規則往往會產生可預測的替換,無法取代長度或封鎖清單檢查的作用。
- 模式檢查刻意設定得較為狹窄。它會標記重複至少三次的 1 至 4 個字碼點片段,或是依序遞增或遞減 1 的四個字碼點序列(例如 "1234" 或 "dcba")。它無法辨識名言、歌詞、人名、日期、鍵盤走勢或外洩資料中的項目。
工具無法偵測的限制
「極佳」標籤是針對已文件化的本機檢查結果所提供的回饋,而非安全認證。Password Strength Checker:
- 不會下載或查詢外洩資料庫,因此無法判斷該值是否已經外洩。
- 無法偵測所有攻擊者可能優先嘗試的鍵盤走勢、語言字典詞彙或個人相關資料。
- 不會以位元估算熵值,也不會預測破解時間。NIST 明確指出,使用者自選密碼的熵難以衡量,因此此工具刻意避免宣稱任何保證。
關於外洩情形,請依賴服務業者的通知,以及在有提供時使用密碼管理工具的「密碼已遭外洩」警示。在伺服器端的儲存方面,請遵循 OWASP Authentication Cheat Sheet,並使用合適的加鹽密碼雜湊函式,例如 Argon2id 或 bcrypt — 不要使用純 SHA 或可逆加密。
將長度、管理工具與 MFA 結合運用
長度是必要條件,但並非充分條件。單一帳號的完整防護樣貌如下:
- 使用 Password Generator 產生 15 個字元以上、唯一且隨機的值,或自行組合一個能記住的長詞組。
- 使用 Password Strength Checker 在本機驗證長度與明顯模式。
- 將該值儲存在密碼管理工具中,以免需要記住它。
- 確認服務業者接受你所產生的確切字元組合。
- 在電子郵件、金融、雲端與管理員帳號上,至少啟用 MFA — 可採用防網釣的 passkey 或 TOTP 碼。
- 在密碼重複使用、外洩或疑似遭到外洩時予以更換,而非依固定週期更換。
長度是密碼安全性的基礎門檻。JavaScript 的 .length 提供最快速的讀取,展開為字碼點能給出 Unicode 正確的讀數,而 Password Strength Checker 提供透明且符合 NIST 的稽核 — 將其結果作為挑選更佳密碼的參考,再以 MFA 為帳號上鎖。
若想深入了解,請參閱 Generate a SHA-512 Password Hash the Right Way。