在 macOS 上產生安全的高強度密碼

「安全」的定義

某些特殊符號因為具備「語法功能」,常常會引發非預期災難。例如:

應避免的「高風險符號」

這幾種符號在 .env、YAML、JSON、或是 Bash 傳遞參數時極易引發災難,強烈建議從隨機密碼的字元池中剔除

  • # (在 .env 或軟體設定檔中,常被誤認為單行註釋的起頭)
  • $ (在 Shell 或雙引號字串中,會被誤認為是變數取值,如 $VAR
  • "' (單雙引號,極易導致字串解析提早結束,造成語法報錯)
  • \ (反斜線,通常具備轉義功能,會吃掉後面那個字元)
  • ` (反引號,在 Bash 中代表執行命令)
  • <> (在終端機常代表輸入輸出重導向)

完全安全的「通用符號」

這些符號既能滿足系統對「必須包含特殊字元」的隨機複雜度要求,又幾乎不會在任何設定檔或資料庫連線字串(Connection String)中引發語法衝突:

  • - (連字號)
  • _ (底線)
  • . (英文句點)
  • @ (小老鼠 — 雖在 URL 中代表帳密分隔,但獨立在變數值內非常安全)
  • * (星號)
  • ! (驚嘆號)

macOS 本地終端機的最優解命令

基於終端機工具,完全排除地雷字元、強度極高、且完全無規律的終端機一鍵生成命令:

LC_ALL=C tr -dc 'A-Za-z0-9_\-.@!*' < /dev/urandom | head -c 24; echo

特點

  1. 乾淨的字元池: A-Za-z0-9_\-.@!* 嚴格限制了只會出現大小寫英數,以及我們篩選過、對 .env 絕對安全的 6 個特殊符號(_-.@!*)。再也不用擔心因為沒加雙引號而導致 # 後面的密碼變不見
  2. 純粹的無規律: 它是從 /dev/urandom 底層熵池直接吐出來的,完全打破了 Apple 密碼.app 的 6-6-6 規律,看起來會像 k9@*F_mX2.bL!9p-QzW_8tVx,「夠亂」
  3. 長度可調: 結尾的 head -c 24 代表長度,可以自由改成 3264,這在系統核心的隨機數生成下只是眨眼間的事

Zsh Alias(自動複製)

~/.zshrc 加入:

alias genpw="LC_ALL=C tr -dc 'A-Za-z0-9_\-.@!*' < /dev/urandom | head -c 24 | pbcopy && pbpaste; echo"

儲存後執行 source ~/.zshrc。以後只要在終端機輸入 genpw,就能秒生密碼並同時輸出在終端中及進入 macOS 剪貼簿,且保證安全不踩雷