密碼產生器完整指南:熵值、長度、字元集、2026 年最佳實踐
寫給:仍在用「Password123!」的所有用戶、想知道密碼到底要多長才安全的工程師、設計帳號系統卻不確定該強制哪些密碼規則的 PM。
「密碼超過 8 字、含大寫小寫數字符號」這個 1990 年代制定的規則,2026 年已被 NIST 800-63B 明確標為過時且有害。現代密碼安全的關鍵不是複雜度,而是熵值(entropy)+ 長度 + 不重複使用。本文 13 分鐘把密碼產生原理、熵值計算、passphrase 設計、Passkey 未來方向、SuperTools 線上工具實戰一次講透。
1. 密碼產生器是什麼
密碼產生器是用密碼學等級隨機數源(CSPRNG)+ 指定字元集 + 指定長度,產出無法被預測的字串。
範例:
12 字、含大小寫數字符號: k7@xL2#pQ9!m
6 個英文單字 passphrase: correct-horse-battery-staple-tomato-velvet
兩種風格各有優劣:
| 風格 | 範例 | 熵值 | 記憶難度 | 輸入難度 |
|---|---|---|---|---|
| 隨機字串 | k7@xL2#pQ9!m |
高(每字 6.5 bit) | 困難 | 中 |
| Passphrase | correct-horse-battery-staple |
高(每詞 13 bit) | 容易 | 容易 |
兩種都「對的」,看用途選。
1.1 為什麼需要產生器
人腦無法隨機。研究顯示人類「自己想」的密碼有強烈 pattern:
- 字典詞 + 數字(
hello123) - 鍵盤序列(
qwerty) - 個人資訊(生日 / 名字)
- 重複使用一個密碼到處用
密碼產生器用 CSPRNG 真正隨機,破除所有 pattern。
2. 5 個核心觀念
2.1 熵值(Entropy)
熵值衡量密碼的「隨機性」,單位 bit。每多 1 bit,破解需嘗試次數翻倍。
公式:
entropy = log2(字元集大小 ^ 長度)
= 長度 × log2(字元集大小)
範例:
| 密碼 | 字元集 | 長度 | 熵值 |
|---|---|---|---|
12345678 |
數字 10 | 8 | 26.6 bit |
abcdefgh |
小寫 26 | 8 | 37.6 bit |
Abcd1234 |
大小寫+數字 62 | 8 | 47.6 bit |
Ab1!Cd2# |
+ 符號 ≈ 95 | 8 | 52.6 bit |
Ab1!Cd2#Ef3% |
同上 | 12 | 78.8 bit |
correct horse battery staple |
字典 7776 詞 × 4 | 4 詞 | 51.6 bit |
實務目標:80 bit 以上為強密碼。
2.2 破解時間估算
GPU farm(2026 年 RTX 5090 集群):
| 演算法 | 每秒嘗試次數 | 80 bit 破解時間 |
|---|---|---|
| MD5 / SHA-256(單 hash) | 10^12 | 38 萬年 |
| bcrypt cost=10 | 10^4 | 3.8 × 10^15 年 |
| argon2id 標準 | 10^3 | 3.8 × 10^16 年 |
意義:
- 用 SHA-256 hash 的系統,密碼至少 80 bit
- 用 bcrypt/argon2 的系統,64 bit 就極安全(但建議仍 80 bit)
2.3 字元集選擇
| 字元集 | 大小 | log2 |
|---|---|---|
| 純數字 0-9 | 10 | 3.32 |
| 純小寫 a-z | 26 | 4.70 |
| 大小寫 | 52 | 5.70 |
| 大小寫 + 數字 | 62 | 5.95 |
| + 符號(常見 32 個) | 94 | 6.55 |
| Diceware 字典 | 7776 | 12.93 |
意義:每字符號可貢獻 6.55 bit;每字典詞可貢獻 12.93 bit。
12 字符號密碼 = 78.6 bit ≈ 6 詞 passphrase 77.6 bit。Passphrase 用 6 詞已勝過大多複雜密碼。
2.4 Passphrase(Diceware)
Diceware 1995 年由 Arnold Reinhold 提出:擲 5 顆骰子查表抽詞。
擲骰: 6-2-1-5-3
查 Diceware 表 → "rabbit"
EFF 改良版 7776 詞(去除生僻字、固定 4-6 字母長度):
# 從 EFF wordlist 抽 6 詞
shuf -n 6 eff_large_wordlist.txt | awk '{print $2}' | tr '\n' '-'
# resemble-mountain-photo-radio-tiger-bag
熵值:6 × 12.93 = 77.6 bit。
優點:
- 記憶容易(人類擅長記詞)
- 輸入容易(不需切換符號鍵盤)
- 跨語言(中文可用四字成語版本)
2.5 NIST 800-63B 2026 規範
舊規範被淘汰的點:
| 舊規範 | 新規範 |
|---|---|
| 必須含大寫 / 數字 / 符號 | 不強制(鼓勵長密碼) |
| 90 天定期換 | 取消定期換(除非疑似洩漏) |
| 不可顯示密碼 | 可選 show password |
| 禁止 paste | 允許 paste(鼓勵用密碼管理器) |
| 8 字以上 | 64 字以上允許(不限上限) |
最重要的新規範:比對洩漏密碼黑名單(HIBP)。如果使用者輸入的密碼已在過去資料外洩名單中,必須拒絕。
3. 實戰範例
範例 1:Python 產隨機密碼
import secrets, string
def generate_password(length=16, use_symbols=True):
chars = string.ascii_letters + string.digits
if use_symbols:
chars += "!@#$%^&*()_+-=[]{};:,.<>?"
return "".join(secrets.choice(chars) for _ in range(length))
print(generate_password())
# k7@xL2#pQ9!mY3vR
重點:用 secrets 模組,不要用 random(不是密碼學等級隨機)。
範例 2:Python Passphrase
import secrets
# EFF wordlist 載入
with open("eff_large_wordlist.txt") as f:
words = [line.split()[1] for line in f if line.strip()]
def passphrase(num_words=6, sep="-"):
return sep.join(secrets.choice(words) for _ in range(num_words))
print(passphrase())
# salute-monsoon-marble-yacht-pebble-thirsty
範例 3:JavaScript(瀏覽器)
function generatePassword(length = 16, useSymbols = true) {
let chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
if (useSymbols) chars += "!@#$%^&*()_+-=[]{};:,.<>?";
const arr = new Uint32Array(length);
crypto.getRandomValues(arr);
return Array.from(arr, n => chars[n % chars.length]).join("");
}
console.log(generatePassword());
重點:用 crypto.getRandomValues,不要用 Math.random。
範例 4:bash 一行產密碼
# 16 字含符號
openssl rand -base64 16 | tr -d "=+/" | cut -c1-16
# 32 字 hex
openssl rand -hex 16
# 從 /dev/urandom
LC_ALL=C tr -dc 'A-Za-z0-9!@#$%^&*' </dev/urandom | head -c 16
echo
# Passphrase
shuf -n 6 /usr/share/dict/words | tr '\n' '-' | sed 's/-$//'
範例 5:用 HIBP API 檢查密碼是否外洩
import hashlib, requests
def check_pwned(password):
sha1 = hashlib.sha1(password.encode()).hexdigest().upper()
prefix, suffix = sha1[:5], sha1[5:]
# k-anonymity: 只送 SHA-1 前 5 碼
resp = requests.get(f"https://api.pwnedpasswords.com/range/{prefix}")
for line in resp.text.splitlines():
hash_suffix, count = line.split(":")
if hash_suffix == suffix:
return int(count)
return 0
count = check_pwned("password123")
print(f"洩漏次數: {count}") # 數百萬次
只送前 5 個 hex 字元(k-anonymity)保護隱私,server 回傳所有以此前綴開頭的 hash,本地比對。
4. 進階技巧
4.1 強制不重複字元
import secrets, string
def unique_password(length=16):
chars = string.ascii_letters + string.digits + "!@#$%^&*"
if length > len(chars):
raise ValueError("Length exceeds unique chars")
return "".join(secrets.SystemRandom().sample(chars, length))
但這降低熵值(少了重複組合),實際無資安幫助,純粹避免人類覺得「怎麼重複了不夠隨機」。
4.2 易讀字元集(排除易混淆)
def readable_password(length=12):
# 排除 0/O, 1/l/I 等
chars = "ABCDEFGHJKLMNPQRSTUVWXYZ" + "abcdefghjkmnpqrstuvwxyz" + "23456789"
return "".join(secrets.choice(chars) for _ in range(length))
適合:需要手動輸入到其他裝置(電視、IoT)的場景。
4.3 PIN(純數字)熵值補償
ATM PIN 4 位(13.3 bit)天生熵值低,靠嘗試次數限制補:
- 3 次錯誤鎖卡 → 攻擊者最多猜 3 組
- 13.3 bit 變相當於 60+ bit
設計帳號 PIN 時務必加 rate limit。
4.4 密碼管理器
人腦不該記 100 個密碼。用密碼管理器(Bitwarden、1Password、KeePass):
- 每站獨立密碼
- 自動填入
- 跨裝置同步(端到端加密)
- 主密碼是唯一要記的(請用 6 詞 passphrase)
2026 年沒用密碼管理器幾乎等於裸奔。
4.5 Passkey(密碼的未來)
Passkey(FIDO2 / WebAuthn)是 2024 年起取代密碼的方案:
- 不需設定密碼
- 用裝置生物辨識(Face ID / Touch ID)+ 私鑰簽章
- 不可被釣魚(key 只能用在註冊的網域)
- 可跨裝置同步(iCloud Keychain / Google Password Manager)
支援網站:Google、Apple、Microsoft、GitHub、Shopify、Best Buy 等。
2026 年新專案應同時支援 Passkey + 傳統密碼,提供 graceful transition。
5. 常見錯誤與解法
錯誤 1:用 Math.random() / random.randint
症狀:產出的密碼可預測。
根因:非密碼學等級 PRNG,種子可被推導。
解法:Python 用 secrets、JS 用 crypto.getRandomValues、bash 用 /dev/urandom。
錯誤 2:強制複雜度但允許短密碼
症狀:規定 8 字含符號,使用者寫 Pass123!。
根因:複雜度規則無法強制熵值。
解法:取消複雜度要求,改要求 12 字以上 + HIBP 黑名單比對。
錯誤 3:定期強制換密碼
症狀:每 90 天逼換 → 使用者改尾數(Pass123! → Pass124!)。
根因:違反人性 → 反而不安全。
解法:NIST 2026 規範取消定期換。只有疑似洩漏才換。
錯誤 4:密碼欄位禁止 paste
症狀:使用者無法用密碼管理器。 根因:以為禁 paste 較安全。 解法:允許 paste。鼓勵用密碼管理器。
錯誤 5:把密碼 hash 後就以為安全
症狀:用 SHA-256 hash 密碼,仍被 GPU 字典攻擊破。 根因:SHA 太快。 解法:用 argon2id / bcrypt(見 Hash 演算法完整比較)。
6. 用 SuperTools 線上版完成相同任務
需要快速產強密碼?打開 SuperTools 密碼產生器:
- 隨機字串 + Passphrase 兩種模式
- 長度 / 字元集自訂:8-64 字、勾選大寫 / 數字 / 符號
- 熵值即時顯示:用顏色標弱(紅)/ 中(黃)/ 強(綠)
- 易讀模式:排除 0/O 等易混淆字
- HIBP 比對:自動 k-anonymity 查是否外洩
- 批次模式:一次產 100 個(適合 seed 帳號)
- 複製到剪貼簿:30 秒後自動清空
工具完全 client-side,密碼絕不上傳(除非主動點 HIBP 檢查,且只送 SHA-1 前 5 碼)。
實際使用流程:
- 開 supertools.tw/security/password
- 選「Passphrase 6 詞」
- 點「Generate」
- 看熵值 ≥ 80 bit 綠燈
- 一鍵複製貼入密碼管理器
立即使用 SuperTools 密碼產生器:https://supertools.tw/security/password
7. 其他語言實作
Python
import secrets, string
"".join(secrets.choice(string.ascii_letters + string.digits) for _ in range(16))
JavaScript
const arr = new Uint8Array(16);
crypto.getRandomValues(arr);
Array.from(arr, b => b.toString(16).padStart(2, "0")).join("");
Go
import "crypto/rand"
b := make([]byte, 16)
rand.Read(b)
fmt.Printf("%x", b)
Rust
use rand::Rng;
let s: String = rand::thread_rng()
.sample_iter(&rand::distributions::Alphanumeric)
.take(16)
.map(char::from)
.collect();
Bash
openssl rand -base64 16
LC_ALL=C tr -dc 'A-Za-z0-9' </dev/urandom | head -c 16
8. FAQ
Q1:12 字 vs 16 字 vs 20 字哪個對? 最低 12(72 bit)、推薦 16(96 bit)。Passphrase 6 詞起跳。
Q2:要不要分大寫數字符號? 不重要。長度與熵值才重要。
Q3:密碼可以放在 LastPass / 1Password 安全嗎? 2022 LastPass 事件後 1Password / Bitwarden 是較安全選擇。本機加密、零知識架構(雲端看不到內容)。
Q4:Passkey 已能完全取代密碼嗎? 2026 年「可選」,未強制。大部分網站仍 fallback 到密碼。
Q5:MFA / 2FA 比強密碼重要嗎? 都重要。即使密碼弱,TOTP / WebAuthn 二步驗證可大幅提升安全。
9. 實戰案例研究
案例 1:LastPass 2022 主密碼洩漏事件
2022 年 LastPass 雲端被入侵,加密 vault 全部外流。每個 user 的安全性取決於:
- 主密碼強度:弱密碼(< 10 字、字典詞)數小時內被破,所有存的密碼全失守
- PBKDF2 iterations:LastPass 預設 100,100 次,部分 user 仍是早期低設定(5,000 次),破解快 20 倍
- 是否啟用 MFA:開了 MFA 即使主密碼破也救得回
事後:
- 大量 user 主密碼弱 → 被破 → crypto wallet 私鑰被偷 → 千萬美元被盜
- 開 MFA 的人安全
教訓:主密碼必須 6 詞 passphrase 以上 + 開 MFA。
案例 2:90 天定期換密碼的反效果
某公司強制 90 天換密碼。研究發現 user 普遍用:
Password123!→Password124!→Password125!(尾數遞增)- 寫便利貼貼螢幕
- 重複用其他公司密碼
結果安全反降。2017 NIST 報告明確記載這現象,建議取消定期換密碼。
修法(後續業界):
- 只在「疑似洩漏」時強制換
- 鼓勵 user 用密碼管理器
- 加 MFA 而非加長密碼規則
教訓:複雜規則反人性 → 反不安全。
案例 3:Passkey 取代密碼的早期實踐
某新創 2024 年改用 Passkey-first(密碼為 fallback):
- 註冊:FaceID/TouchID 一鍵綁定(無需 email 驗證)
- 登入:FaceID 解鎖(無打字)
- 跨裝置:iCloud Keychain / Google Password Manager 同步
成果:
- 註冊轉換率 +35%(無 email 驗證流程)
- 帳號被盜事件 0 起(vs 之前每月 5-10 起)
- Support ticket 「忘記密碼」-95%
教訓:Passkey 不只是安全升級,是 UX 革命。
10. 結論 + 延伸閱讀
密碼安全的關鍵不是「複雜」而是「長且唯一」。掌握熵值計算、用 CSPRNG 產生器、搭配密碼管理器 + 二步驗證、未來逐步轉 Passkey,就是 2026 年的安全標配。下次設帳號時,先到 SuperTools 線上工具產一個 80 bit 熵值的密碼或 6 詞 passphrase,貼入密碼管理器,永遠不要再「自己想」密碼。三條黃金法則:用 passphrase 不用複雜符號、密碼管理器是必備、MFA / Passkey 是真正的護身符。
延伸閱讀: