Security Tools

密碼強度檢測器

基於 zxcvbn 引擎實時分析:常見弱口令字典、鍵盤走位、連續序列、重複與日期模式都會扣分,比「大小寫+數字+符號」的字元計數更接近真實安全性。全程本機計算,密碼不出瀏覽器。

zxcvbn 引擎 弱口令字典識別 100% 本機計算 實時出結果
密碼只在本機計算,不會上傳
k-匿名:只傳送 SHA-1 雜湊的前 5 位,密碼不出瀏覽器
強度 /100
極弱 極強
長度
有效熵
比特
字元空間
離線破解(GPU 叢集,約 100 億次/秒)
在線猜測(限速,約 100 次/小時)
進階策略設定

逗號或換行分隔,不區分大小寫。zxcvbn 會自動識別大小寫變形、Leet 替換(如 Pa$$w0rd)和反轉寫法。

對比兩個密碼

WHY IT MATTERS

為什麼"有大小寫數字符號"不等於安全

P@ssw0rd! 四類字元齊全,卻在真實外洩密碼榜上有名。密碼強度取決於猜測難度,而不是字元種類的算術。

01

弱口令字典匹配

內建常見密碼與詞表,命中即重罰;password、123456、P@ssw0rd 這類會被正確判為極弱。

02

模式識別

鍵盤走位、連續序列、重複片段、日期年份、常見單詞都會顯著降低有效猜測空間。

03

有效熵而非理論熵

評分基於識別出的結構估算真實猜測次數,而不是簡單地用字元集大小乘長度。

04

兩種破解場景

分別離線 GPU 爆破和在線限速猜測的時間,幫助建立對攻擊成本的直覺。

05

自定義策略與黑名單

可設最小長度與字元要求,加入公司名、專案代號等專屬弱詞,適配企業口令規範。

06

全程本機運算

密碼不離開瀏覽器,不經過任何伺服器;設置僅存在你自己的 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 實現:

JavaScript
<!-- 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>
            
Node.js
// npm i @zxcvbn-ts/core
import { zxcvbn } from '@zxcvbn-ts/core';

const result = zxcvbn('P@ssw0rd!');
console.log(result.score, result.guesses_log10);
            
PHP
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'];
            
Python
pip install zxcvbn
            
from zxcvbn import zxcvbn

res = zxcvbn('P@ssw0rd!')
print(res['score'], res['crack_times_display'])
            
Go
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)
}
            
Rust
# 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 每秒嘗試上百億個哈希;而在線登入介面通常有頻率限制,每秒嘗試不了幾次。同一個密碼在兩種場景下的生存時間可能相差萬億倍,所以需要分開看。

檢測結果會被保存嗎?

不會。密碼全程只在你的瀏覽器記憶體中,重新整理即消失;只有你自定義的策略(長度要求、黑名單)會存在本地瀏覽器裡,不包含任何密碼。

相關工具