コマンドラインでランダムな文字列を生成する

FuelPHPとかSymfony2が触りたいのに何故かCakePHPをやってるぱせらです。
んで、こういうフレームワークはセキュリティ用のsaltとかが初期状態だと「ちゃんと設定してね」みたいなメッセージが出るようになってるので書き換えなきゃいけないんだけど、適当にキーボードがちゃがちゃやるのは問題外として、ハッシュ関数Base64はなんとなくそれっぽく見えちゃうので、こんな感じで生成してみた。

# 英数40桁
cat /dev/urandom | tr -dc '[:alnum:]' | head -c 40

# 数字29桁
cat /dev/urandom | tr -dc '[:digit:]' | head -c 29

上の例はCakePHPのcore.phpに初期設定されてるやつに合わせてみた*1けど、文字種とか文字数とか自由に決められていい感じ。


あとこんな感じで一気に生成できたりするのも楽しい。

$ cat /dev/urandom | tr -dc '[:graph:]' | fold -w 8 | grep '[:punct:]' | head -n 5
#n;%[A@2
AttFfb7,
i4/R>3pu
JcfA}s#k
$)E+:.VX

$ cat /dev/urandom | tr -dc 'a-zA-Z0-9_!@#$%&+-' | fold -w 8 | grep -i '[_!@#$%&+-]' | head -n 5
dE_MGw63
soL2@DoG
04rlu4_S
sL+lh&82
+QiG2Dxh


2012-07-22追記
OS Xとかで"tr: Illegal byte sequence"とか怒られちゃう場合は、trの前にLC_CTYPE=Cをつけてあげるといいかも。

$ cat /dev/urandom | tr -dc '[:alnum:]' | head -c 40
tr: Illegal byte sequence

$ cat /dev/urandom | LC_CTYPE=C tr -dc '[:alnum:]' | head -c 40
zec3tqT24y9PxEetepzca82mSYAOEvVpbfFuHYuQ

*1:Security.cipherSeedのほうは"digits only"って書かれてるので。