密碼產生器會從您選擇的字元池中產生一組隨機字串——包含大寫字母、小寫字母、數字與符號——因此結果具有唯一性,且遠比任何人手動想出來的密碼更難猜測。強度是以熵位元數來衡量,計算方式是長度乘以字元池大小的 log2;當四種字元類型全部啟用時,字元池共有 86 個不同的字元,因此每個字元大約貢獻 6.4 位元。這表示從完整字元池產生的 16 字元密碼,值大約為 103 位元;12 字元的密碼則大約為 77 位元——一個實用的經驗法則是:低於 60 位元為弱,60 至 100 位元為中等,超過 100 位元則對離線暴力破解攻擊具有強抵抗力。一個值得信賴的產生器會從密碼學安全來源取隨機性,而非使用可預測的 Math.random 函式,均勻地套用而不產生模偏差,並完全在您的瀏器中執行,因此絕不會將任何資料傳送到伺服器。
每當需要建立帳號、輪替憑證或替換一個重複使用的弱密碼時,人們就會使用密碼產生器。這項工具的工作是消除人為因素——可預測的規律、生日、鍵盤走位——並以從裝置取得的真實隨機性取代。使用強健的隨機密碼產生器現在已成為個人與開發人員建立註冊流程時的標準做法,因為另一種選擇——由人挑選好記的單字——正是攻擊者花費數十年研究破解的輸入類型。

如何產生一組強密碼
整個過程只需要幾次點擊,無需註冊帳號、登入或上傳檔案。您使用的工具應能讓您調整長度與字元集、顯示產生的熵值,並讓您一鍵取得最終字串。
- 在瀏覽器分頁中開啟密碼產生器。
- 使用滑桿或數字框設定長度。長度越長越安全;16 字元是多數帳號合理的預設值,對於高價值的帳號則值得使用 20 字元以上。
- 切換要包含的字元類型。大寫、小寫、數字與符號都會增加字元池;如果您不需要經常手動輸入密碼,請將它們全部開啟。
- 可選擇排除容易混淆的字元,例如 0、O、1 和 l,讓字串在紙本上或電話中更容易辨識。
- 查看工具回報的強度與熵值估計——確認其落在「強」等級(100+ 位元)後再採用。
- 點擊複製即可將密碼抓取到剪貼簿,或點擊產生以重新產生,直到獲得您滿意的結果。
- 將結果直接貼到帳號表單或您的密碼管理工具中。完成後關閉分頁;資料不會被儲存。
加入長度或字元類型時會產生什麼變化
有兩個旋鈕會影響值:長度與字元池大小。字元池大小是產生器可從中挑選的不同字元數量,每次啟用新的字元類型時都會增加。字元池大小與每位元位元數之間的關係遵循 log2 曲線:
| 啟用的字元類型 | 字元池大小 | 每位元位元數 |
|---|---|---|
| 僅小寫 | 26 | ~4.7 位元 |
| 小寫 + 大寫 | 52 | ~5.7 位元 |
| 小寫 + 大寫 + 數字 | 62 | ~6.0 位元 |
| 小寫 + 大寫 + 數字 + 符號 | 86 | ~6.4 位元 |
「每位元位元數」欄位就是字元池大小的 log2——它告訴您密碼中每個位置增加多少不確定性。為 16 字元的密碼加入符號,會讓熵值從約 95 位元提升到約 103 位元;有用,但幅度有限。在相同字元池下將長度從 16 字元加倍到 32 字元,則會讓熵值從約 103 位元提升到約 205 位元——這是更大的躍進。長度是最強而有力的單一手段,這也是 NIST 與 OWASP 現在傾向採用長字串或密碼片語,而非僅更換字元集卻不增加長度的強制複雜度規則的原因。
以下是一個常見情境的數學推導:當四種字元類型全部啟用時,字元池為 86 個字元,因此 log2(86) ≈ 6.426。乘上長度 16,可得 16 × 6.426 ≈ 103 位元的熵值。同樣的公式套用在來自相同字元池的 12 字元密碼上,則約為 77 位元——屬於中等,而非強。重點在於產生器可選擇的字元池大小,而非個別符號看起來多麼特殊。
強度等級與熵值的對應
一旦掌握位元數,剩下的就是解讀。以下門檻是衡量密碼對離線暴力破解攻擊抵抗力的實用經驗法則——在這種情境下,攻擊者可以針對竊取到的雜湊資料庫以全硬體速度進行猜測:
| (位元) | 等級 | 意義 |
|---|---|---|
| 低於 60 | 弱 | 在消費級 GPU 上數小時或數天即可破解;請勿用於真實帳號。 |
| 60 至 100 | 中等 | 可抵擋隨性的攻擊,但對有決心且資源充足的對手仍顯脆弱。 |
| 100 以上 | 強 | 在可預見的未來,能抵禦實際的離線暴力破解情境。 |
來自完整 86 字元池的 12 字元密碼,熵值約為 77 位元——中等,而非強。來自相同字元池的 16 字元密碼,熵值則約為 103 位元——強。這正是該工具的建議預設值設定為 16 或以上的理由。
隨機性的真正來源
要讓產生器產生安全的密碼,有兩件事必須正確:隨機性的來源,以及隨機數對應到字元的方式。任何一項出錯,輸出的強度都會低於其長度所暗示的水準。
來源之所以重要,是因為 JavaScript 內建的 Math.random 函式速度快但可預測。只要蒐集足夠的先前輸出,攻擊者就能重建其內部狀態並預測未來值。這對電子遊戲而言沒問題;但對秘密資訊來說則完全不可接受。密碼學安全 RNG——具體來說是瀏器的 crypto.getRandomValues() API——經過設計,即使對手看過它曾經產生過的每一個值,也無法將其輸出與真正的隨機性區分開來。一個值得信賴的密碼產生器必定使用 CSPRNG,而非 Math.random。
對應方式之所以重要,是因為一個稱為模偏差的微妙問題。如果您取一個 32 位元的隨機整數並對字元池大小取餘數,只要 2^32 無法被字元池大小整除,字元池中的某些字元出現的頻率就會略高於其他字元。偏差雖然很小——不到百分之一——但確實會縮減真實熵值並使輸出更具可預測性。修正方法是拒絕取樣:將任何會落入偏差帶的隨機值丟棄並重新抽樣。處理正確時,所選字元集中的每個字元出現的機率將完全相等。產生器也會保證至少包含一個您所選類型的字元,接著使用 Fisher–Yates 演算法將整個結果打亂,確保那些保證出現的字元不會固定在可預測的位置。
由於產生作業是在瀏覽器本機進行,因此密碼絕不會透過網路傳輸、不會寫入伺服器記錄、也不會儲存於任何地方。它僅存在於您的瀏器分頁中,直到您複製為止,關閉分頁即一併捨棄。這種純本機的設計正是讓線上產生器得以保護隱私的原因:隨機性來自您自己的裝置,透過 crypto.getRandomValues 取得,而最終字串從不離開該裝置。
現代指引:長度優先於強制的複雜度
過去的建議堅持要求大寫加小寫加數字加符號——這套規則產生的密碼使用者幾乎難以輸入,攻擊者卻仍然能夠猜測。OWASP 的身分驗證速查表與 NIST 特別出版品 800-63B 現在則反過來指引:又長、又隨機、又唯一的字串,勝過又短、又複雜的字串;首要任務是將候選密碼與已知外洩的密碼清單進行比對。產生器的工作是穩定地產生這些又長、又隨機、又唯一的字串;密碼管理工具的工作則是記住它們,讓您不必自行記誦。
兩條實用的規則可涵蓋大多數情境。第一,為每個帳號使用一組由產生器產生且唯一的密碼,這樣單一網站的資料外洩不會連累其他帳號——密碼強度檢查工具是審查您手上既有密碼的實用輔助工具。第二,對於重要的帳號,建議使用 16 字元以上;其餘情況則交由密碼管理工具處理,而非仰賴記憶。「長、隨機、唯一、由管理工具儲存」這個組合,正是現代指引的真正要求,而一個優質的產生器是這套工作流程的前半段。
延伸閱讀:在 C# 中從字串產生 SHA256 雜湊並進行驗證。
延伸閱讀:密碼強度演算法:分數背後的規則。