使用 Perl 產生亂數密碼
自己用 Perl 寫一個產生密碼的指令稿其實也很簡單,以下是一個範例程式:
#!/usr/bin/perl print generatePassword(10) . "\n"; exit; sub generatePassword { $length = shift; $possible = 'abcdefghijkmnpqrstuvwxyz23456789ABCDEFGHJKLMNPQRSTUVWXYZ'; while (length($password) < $length) { $password .= substr($possible, (int(rand(length($possible)))), 1); } return $password; }
這個 Perl 程式會以亂數的方式從 $possible
中選取字元組成密碼,執行之後所產生的輸出會像這樣:
9CBGAyzYt7
如果要增加密碼的複雜度,可以自己在 $possible
中加入特殊字元。
Shell 指令稿
除了使用現成的指令或是程式產生密碼之外,也可以利用 Linux 中的 shell 與一些小工具來產生密碼,這種作法就會有非常多的變化與彈性,以下是一些範例。
使用 SHA 計算時間的雜湊碼(hash),經過 base64 編碼之後,取前 32 個字元:
date +%s | sha256sum | base64 | head -c 32 ; echo
輸出為
NjY3ODU4YzA5MzJkOTk1ZjQyNjBhYjhk
讀取 /dev/urandom
的隨機內容,取出可以作為密碼的字元,然後拿前面 32 個產生一組密碼:
< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32}; echo
輸出為
mNJrtsKNXhFiReGApwnJOx58XAaLqRVv
使用 openssl
的 rand
功能產生亂數密碼:
openssl rand -base64 32
輸出為
zoHCcHtmngCSfcfzQrd+HRNEyQwTF7xdXAZ+yJA7Av4=
這個跟上面 /dev/urandom
的例子類似,不過用不同的處理方式:
tr -cd '[:alnum:]' < /dev/urandom | fold -w30 | head -n1
輸出為
46kSNVvQCeRNsAAXr5H5FZK1Ci5eX9
另外一個讀取 /dev/urandom
例子:
strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 30 | tr -d '\n'; echo
輸出為
0RiqDmFuHXmkcCNPDjL7qxc0q9WmLs
使用 dd
讀取 /dev/urandom
例子:
dd if=/dev/urandom bs=1 count=32 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev
輸出為
3lvoy9+LB0mIAOjk1TDrE1dT7QSjbL+fHTxsft92zEI
產生只需要用左手即可輸入的密碼:
< /dev/urandom tr -dc '12345!@#$%qwertQWERTasdfgASDFGzxcvbZXCVB' | head -c8; echo ""
輸出為
fsTDqZz2
如果要時常使用這這類的指令,可以將其寫成 shell 的函數,放進 ~/.bashrc
中,讓使用更方便:
randpw(){ < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-16};echo;}
之後即可直接執行這個函數:
randpw
輸出為
aV7CbdjUDeRIW3yg
最後介紹一個最簡單的亂數密碼產生方式,除了 Linux 之外,Mac OS X 或是 Cygwin 也都可以直接使用:
date | md5sum
輸出為
f2ede6e6c79a400ea82384a182d84be2 --
當然有人會認為這樣產生密碼的方式不夠隨機,不過對於一般人應該是足夠了。
參考資料:Tecmint、About Tech、HTG
繼續閱讀: 12