密碼強度檢測器
基於 zxcvbn 引擎實時分析:常見弱口令字典、鍵盤走位、連續序列、重複與日期模式都會扣分,比「大小寫+數字+符號」的字元計數更接近真實安全性。全程本機計算,密碼不出瀏覽器。
- 檢測引擎
- zxcvbn
- 評分
- 0–4 五檔
- 隱私
- 不上傳
- 字典
- 內建常見弱口令
進階策略設定
逗號或換行分隔,不區分大小寫。zxcvbn 會自動識別大小寫變形、Leet 替換(如 Pa$$w0rd)和反轉寫法。
對比兩個密碼
WHY IT MATTERS
為什麼"有大小寫數字符號"不等於安全
P@ssw0rd! 四類字元齊全,卻在真實外洩密碼榜上有名。密碼強度取決於猜測難度,而不是字元種類的算術。
弱口令字典匹配
內建常見密碼與詞表,命中即重罰;password、123456、P@ssw0rd 這類會被正確判為極弱。
模式識別
鍵盤走位、連續序列、重複片段、日期年份、常見單詞都會顯著降低有效猜測空間。
有效熵而非理論熵
評分基於識別出的結構估算真實猜測次數,而不是簡單地用字元集大小乘長度。
兩種破解場景
分別離線 GPU 爆破和在線限速猜測的時間,幫助建立對攻擊成本的直覺。
自定義策略與黑名單
可設最小長度與字元要求,加入公司名、專案代號等專屬弱詞,適配企業口令規範。
全程本機運算
密碼不離開瀏覽器,不經過任何伺服器;設置僅存在你自己的 localStorage 中。
密碼強度相關知識
關於評分原理、破解時間和怎樣才算一個好密碼。
zxcvbn 的 0–4 分是怎麼算出來的?
zxcvbn 先把密碼拆解成若干片段:字典詞(常見密碼、英文單詞)、鍵盤走位、序列、重複、日期、暴力片段等。
然後對每個片段估算攻擊者需要多少次猜測,取組合後的總數,再映射成 0–4 五檔。它還會自動考慮大小寫反轉、Leet 替換(@→a、0→o)、年份後綴等常見變形,所以 P@ssw0rd 不會因為字元種類多就得高分。
"有效熵"和字元空間有什麼區別?
字元空間是按字元集大小乘長度算出的理論上限,假設每個字元完全隨機——真實密碼幾乎從不滿足。
有效熵(本頁顯示的位元數)是 zxcvbn 識別完字典詞和模式之後估算的真實猜測空間。例如長度相同的情況下,iloveyou2024 的有效熵遠低於隨機字串。
破解時間是怎麼估算的?可信嗎?
破解時間 = 估計猜測次數 ÷ 每秒猜測速度。本頁給兩種速度:離線 GPU 叢集約 100 億次/秒(攻擊者已拿到密碼雜湊),在線限速約 100 次/小時(登入介面有頻率限制)。
它是數量級參考而非精確預言:真實速度取決於雜湊演算法(bcrypt/Argon2 比 MD5 慢幾個數量級)、攻擊者硬體和字典品質。但差 10 倍以內不影響結論——差幾百萬倍才有意義。
什麼樣的密碼才算好?
兩種可靠路線:一是密碼管理員生成的 16 位以上隨機字串,每個網站不同;二是由 4 個以上互不相關的詞組成的通關短語(如 correct-horse-battery-staple),長且無意義。
無論哪條路線,都應配合多因子認證(MFA),並且不要在多個網站重複使用同一個密碼。
網站已經要求大小寫數字符號,為什麼還被打低分?
企業策略(長度、字元種類)是合規底線,回答的是「符不符合規定」;zxcvbn 評分回答的是「猜不猜得出來」。兩者是正交的兩件事。
在常見詞後加個驚嘆號和年份(password!2024)能通過大多數策略檢查,但在字典攻擊面前幾秒鐘就會淪陷。
我的密碼會被上傳嗎?
不會。檢測完全在你的瀏覽器內用 JavaScript 完成,頁面沒有任何提交密碼的網路請求;你也可以斷網後使用。自定義策略保存在瀏覽器本地,同樣不含密碼明文。
如何透過程式語言檢測密碼強度
在自己的註冊/改密表單裡做實時強度檢測,可以使用各語言的 zxcvbn 實現:
<!-- CDN -->
<script src="https://unpkg.com/[email protected]/dist/zxcvbn.js"></script>
<script>
const res = zxcvbn('P@ssw0rd!');
console.log(res.score, res.crack_times_display);
</script>
// npm i @zxcvbn-ts/core
import { zxcvbn } from '@zxcvbn-ts/core';
const result = zxcvbn('P@ssw0rd!');
console.log(result.score, result.guesses_log10);
composer require bjeavons/zxcvbn-php
<?php
require __DIR__ . '/vendor/autoload.php';
use ZxcvbnPhp\Zxcvbn;
$zxcvbn = new Zxcvbn();
$res = $zxcvbn->passwordStrength('P@ssw0rd!');
echo $res['score'];
pip install zxcvbn
from zxcvbn import zxcvbn
res = zxcvbn('P@ssw0rd!')
print(res['score'], res['crack_times_display'])
go get github.com/nbutton23/zxcvbn-go
package main
import (
"fmt"
zxcvbn "github.com/nbutton23/zxcvbn-go"
)
func main() {
res := zxcvbn.PasswordStrength("P@ssw0rd!", nil)
fmt.Println(res.Score, res.Guesses)
}
# Add dependency
cargo add zxcvbn
use zxcvbn::zxcvbn;
fn main() {
match zxcvbn("P@ssw0rd!", &[]) {
Ok(estimate) => {
println!("score: {}", estimate.score()); // 0..4
if let Some(times) = estimate.crack_times() {
println!("offline: {:?}", times.offline_slow_hashing_1e4_per_second());
}
}
Err(err) => eprintln!("zxcvbn error: {err}"),
}
}
說明:這些函式庫給出的強度與模式估算可能與本頁略有版本差異,核心原理一致。伺服端檢測時建議同時做長度上限和限流,避免被惡意超長輸入消耗運算資源。
常見問題
密碼強度檢測器的工作原理是什麼?
本页使用 Dropbox 开源的 zxcvbn 算法:它把密码与常見弱口令字典、英文詞表、鍵盤走位、序列、日期和重複模式逐一比對,估算攻擊者平均需要多少次猜測,再映射成 0–4 五檔評分和破解時間。
P@ssw0rd 看起來很複雜,為什麼只有極弱?
它是洩露密碼庫中最經典的弱密碼之一。zxcvbn 的字典裡包含它,並且能識別大小寫變形和 Leet 替換(a→@、o→0)。字符種類多但結構完全可預測,攻擊者的規則字典會第一批嘗試它。
密碼多長才算安全?
在隨機生成的前提下,12 位以上通常已足夠抵禦在線攻擊,16 位以上可以抵禦離線 GPU 爆破很多年。長度比字符複雜度更重要:一個 20 位的純小寫隨機串,遠強於一個 10 位的四類字符混合密碼。
為什麼破解時間分離線和在線兩種?
攻擊場景不同:網站被拖庫後,攻擊者可以在本地用 GPU 每秒嘗試上百億個哈希;而在線登入介面通常有頻率限制,每秒嘗試不了幾次。同一個密碼在兩種場景下的生存時間可能相差萬億倍,所以需要分開看。
檢測結果會被保存嗎?
不會。密碼全程只在你的瀏覽器記憶體中,重新整理即消失;只有你自定義的策略(長度要求、黑名單)會存在本地瀏覽器裡,不包含任何密碼。