密碼生成器
生成自訂長度和字元類型的強密碼
排除容易混淆的字元,如 0O、1lI
什麼是密碼生成器?
密碼產生器會根據指定長度和字元規則建立隨機、難以猜測的強密碼。可靠的產生方式應使用加密安全隨機數,並在目標系統確實支援時才組合大寫字母、小寫字母、數字和特殊符號。強密碼能降低字典攻擊、暴力猜測和撞庫風險,但不能取代密碼管理員、每個帳號使用唯一密碼和啟用多因素驗證等安全習慣。過於複雜的密碼不應靠記憶或重複使用,而應安全儲存。對於團隊或共享系統,還需要明確輪換週期、負責人和存取權限。
使用方法
產生步驟
- 選擇密碼長度(建議至少 12 個字元)
- 勾選字元類型:大寫字母、小寫字母、數字、符號
- 可選擇排除容易混淆的字元,例如 0O、1lI
- 點選「產生」按鈕,重複操作直到滿意
密碼強度
- 弱:少於 8 個字元或僅使用單一字元類型
- 普通:8-11 個字元,混合字母與數字
- 良好:12-15 個字元,包含多種字元類型
- 強:16 個字元以上,包含所有字元類型
安全提示
- 所有密碼皆在本機端產生,不會上傳到伺服器
- 為不同網站使用不同的密碼
- 使用密碼管理員安全地儲存密碼
- 定期更換重要帳號的密碼
- 避免在密碼中使用個人資訊
使用場景
技術原理
密碼生成器從 crypto.getRandomValues(new Uint32Array(n)) 取得隨機性,該函式以來自作業系統熵池的加密安全偽隨機值填充型別陣列(Linux 上為 getrandom、Windows 上為 BCryptGenRandom、macOS/iOS 上為 SecRandomCopyBytes)。這是 W3C Web Cryptography API 定義的 CSPRNG——不像 Math.random(),V8 中使用 xorshift128+ 演算法,被明確記載為非加密且可從少量輸出樣本預測。 字元池由使用者選取的字元類別組成:大寫字母(26 個字母 A-Z)、小寫字母(26 個字母 a-z)、數字(10 個字元 0-9)和特殊符號(32 個字元 !@#$%^&*()_+-=[]{}|;:,.<>?),最大池大小為 94 個字元。自訂字元集或排除清單(包括移除 i、I、l、L、1、o、O、0 的易混淆字元過濾器)可進一步調整字元池。每個密碼字元透過 array[i] % pool.length 選取,由於 CSPRNG 輸出在 32 位元上均勻分佈,且模偏差(|pool| 不能整除 2^32)對 256 個字元以下的池可忽略不計——偏差低於 0.00000006%,遠低於任何實際關切。 密碼強度以搜尋空間大小衡量:對於大小為 C 的字元池和長度 L 的密碼,可能的密碼數量為 C^L。以位元表示的熵為 log2(C^L) = L × log2(C)。對於啟用所有四種字元類別(C=94)的 16 字元密碼,產生 94^16 ≈ 4.4 × 10^31 種組合,約 105 位元的熵。以假設的每秒 10^12 次猜測速率(大約是大型 GPU 叢集對 NTLM 等快速雜湊的吞吐量),窮舉搜尋大約需要 4.4 × 10^19 秒——遠超宇宙的年齡。此模型假設攻擊者必須測試每種組合(無字典或基於模式的捷徑),且密碼使用 bcrypt 或 Argon2id 等緩慢加鹽雜湊演算法而非明文儲存。 NIST SP 800-63B 建議使用者自選密碼最少 8 個字元,機器產生的憑證至少 6 個隨機字元,並記錄字元集。生成器 4–64 字元的長度範圍涵蓋了從 PIN 碼到高熵機器憑證的所有場景。以字母開頭的選項確保第一個字元從 [A-Za-z] 中選取,滿足要求密碼以字母開頭的舊系統需求。
- CSPRNG 來源:crypto.getRandomValues() 從作業系統核心的 CSPRNG 拉取熵(getrandom/BCryptGenRandom/SecRandomCopyBytes)——不像 Math.random()(xorshift128+),它不可預測、不可由頁面播種,適用於憑證產生。
- 字元空間數學:啟用全部四種類別時,池大小為 94;每個字元的熵為 log2(94) ≈ 6.55 位元。16 字元密碼帶有約 105 位元的熵;長度加倍到 32 則提升至約 210 位元。
- 模選擇:array[i] % pool.length 將 32 位元 CSPRNG 輸出映射到字元索引——對 256 字元以下的池,偏差低於 6 × 10^-8 %,在密碼學上可忽略不計。
- 暴力破解抵抗模型:以每秒 10^12 次猜測(GPU 叢集規模),16 字元、94 符號的密碼需要約 10^19 秒才能窮舉——但這假設使用快速雜湊;cost factor 為 12 的 bcrypt 將攻擊者降至約每秒 10^4 次猜測,使即使是 8 字元的密碼也能保持韌性。
- 易混淆字元排除:過濾器移除 {i, I, l, L, 1, o, O, 0}(8 個字元)——這將池從 94 減少到 86,每個字元損失約 0.6 位元的熵,對於手動轉錄場景的可用性提升而言是可以接受的。
- NIST SP 800-63B 合規:該標準要求機器產生的金鑰最少 6 個隨機字元,並建議記錄字元空間——生成器的預設方案(簡單 8 字元、強壯 20 字元)對應不同的保證等級。
- localStorage 歷史記錄:最近 10 個產生的密碼持久化在 window.localStorage 中,其作用域限於來源和瀏覽器設定檔——清除歷史記錄會從儲存中移除它們,但磁碟級取證工具可以恢復,因為 localStorage 在瀏覽器設定檔目錄中以明文 SQLite 資料庫形式儲存。
範例
強密碼(混合字元類別)
Kx9#mP2$vL7@nQ4! - 16 個字元,涵蓋全部四類(大寫/小寫/數字/符號)
強度:極高;即使每秒嘗試 100 億次,暴力破解也需要數百年PIN 碼(4 位數)
8527 - 4 位數字
強度:共 10,000 種組合;僅適合搭配速率限制與鎖定機制的裝置解鎖,不適用於線上帳號密碼強度比較
8 字元、僅小寫 : 26^8 ≈ 2.08e11 種組合
8 字元、混合類別 : 94^8 ≈ 6.10e15 種組合
16 字元、混合類別 : 94^16 ≈ 3.7e31 種組合
說明:每多一個字元,金鑰空間就乘以 94,而非乘以 8——長度比類別數更重要常見問題
密碼是在我的瀏覽器裡產生的嗎?
是的。本頁使用 Web Crypto API 的 crypto.getRandomValues,可提供加密強度足夠的隨機位元組。密碼絕不會離開你的裝置,不會被記錄,也不是由任何決定性種子推導而來。如果想再保險一點,可以重新整理頁面以開啟一段新的熵序列。
我該選什麼長度與字元組合?
對於線上帳號,現在的最低標準是 16 個字元以上,並包含大寫、小寫、數字與符號。對於主密碼(密碼管理員、加密金鑰)建議 20 個字元以上,或 6 至 7 個單字組成的通行短語。長度過了某個門檻後,比字元集複雜度更重要。
為什麼有些網站不接受我剛剛產生的密碼?
有些網站仍有令人意外的限制:最大長度(常見是 12 至 20)、不允許符號、只允許特定符號,或不允許空白。本頁提供字元類別的開關讓你能配合規則。同時也建議向那些網站反應——這類政策反而會削弱安全性。
是否會刻意避開某些字元?
若啟用「避免相似字元」選項,產生器會排除 0/O、1/l/I 這類在紙本或便條紙上抄寫時容易看錯的組合。如果只在數位環境貼上使用,可以關閉此選項以取得最大熵。
長隨機密碼比通行短語更安全嗎?
在熵相同時,兩者破解難度一樣。一組 16 字元的混合密碼,大致等同於從 2000 字詞清單裡隨機挑出的 6 字通行短語。通行短語比較容易輸入與記憶;純隨機字串則比較適合從密碼管理員貼上使用。視用途選擇即可。
可以把這個拿來當密碼管理員的主密碼嗎?
可以——這裡使用的隨機來源就是瀏覽器產生 HTTPS 金鑰時所用的同一個 Web Crypto API。不過若是極高風險的機密(主金鑰、復原碼),有些人會選擇丟骰子(diceware)或使用離線工具,純粹為了把瀏覽器從信任鏈中完全移除。
我可以把產生的密碼存在這裡嗎?
不行。本頁不會儲存密碼;請立刻把它複製到密碼管理員(1Password、Bitwarden、KeePass 或瀏覽器內建管理員)。一旦關閉頁面或重新整理,密碼會永久消失。