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