🐚
macOS のシェルスクリプトで使える、ランダムな文字列を生成するいくつかの方法
シェルスクリプトでパスワードやシークレット文字列を自動的に生成したいときに使えるコマンドラインです。
基本的なアプローチ
- 擬似乱数生成器として
/dev/urandom
を用いる-
/dev/urandom
は暗号論的擬似乱数生成器として使えたはずなので、パスワードを生成する目的で利用しても問題ないはず…
-
-
head -c バイト数
コマンドで、必要な量のランダムなバイトシーケンスを得る - バイトシーケンスを
base64
コマンドやxxd
コマンドで printable な文字列に変換する
具体例
Base64 エンコードされたランダムな文字列を得る
Base64 エンコードの都合上、文字列中に +
や /
の文字や文字列末尾にパディングの =
が付加されることがあるので、それらの文字が含まれると都合が悪い場合は別の文字に置き換えるなどしてください。
$ head -c 18 </dev/urandom | base64
iaAx3z9i7PSYkpVsoVYfDnYm
# バイトシーケンスの長さが 3 の倍数でない場合にパディング文字 = が付加されるので、tr を用いて取り除く
$ head -c 7 </dev/urandom | base64 | tr -d '='
tt4bCd37nA
16進数のランダムな文字列を得る
# xxd コマンドは 60 文字ごとに行を折り返すので、改行を除去するために tr コマンドを用いている
$ head -c 32 </dev/urandom | xxd -p | tr -d '\n'
05814e7c860e044ec1aa59be6db4d5443ae61e46972ed6f8b4846ba6b7f552e8
UUID で十分な場合
uuidgen
コマンドを使いましょう。
$ uuidgen
BF8374B3-5EE3-48DC-B825-8E32F554986A
Discussion