OpenSSL の rand コマンドでランダムな文字列を得る
パスワードなどのためにランダムな文字列が欲しいとき、使用する文字に制限があるような場合には、文字列生成用のスクリプトを書いたりしますが、お手軽に生成するなら OpenSSL の rand コマンドを使うのがおすすめです。
コマンドの書式は
$ openssl rand -hex 24
$ openssl rand -base64 24
のような形になります。最後の数字は生成するデータのバイト数です。上記の例では 24 バイトのデータを出力しています。-hex
や -base64
は出力時のフォーマットです。これらを指定しないと出力が文字化けしてしまい、使い物になりません。どのフォーマットで出力するかによって、実際に表示される文字の種類と長さが変わってきます。
-hex を指定した場合
-hex
を指定した場合、出力される文字は正規表現で表すと [0-9a-z]
になります。また、文字の長さは指定したバイト数を n とすると、2n となります。
$ openssl rand -hex 24
8282287913b59575be07c5b3ad7bdc50940e372a94019267
-base64 を指定した場合
-base64
を指定した場合、出力されるは正規表現で表すと [0-9a-zA-Z+/]
になります。また、文字の長さは指定したバイト数を n とすると、4(n/3) となります(n/3 は切り上げ)。ただ、n が 3 の倍数でない場合は、末尾が = で埋められるので、n は 3 の倍数のほうがいいと思います。
$ openssl rand -base64 24
IJ+XidW4AQLG73HBJWtM/9I8jKAKMsji
$ openssl rand -base64 23
JeBCcyauK/y3ME0lhg1LWTSrqMZZulk=
ちなみに、Base64 の仕様で出力される文字が 64 文字を超えると改行されるため、出力を 1 行に収めたいときは出力するバイト数は 48 にとどめる必要があります。
$ openssl rand -base64 48
fyvx7ihbyRZGHIskq43tZeGT83up5kSYr3A8GBuxLJrjkdd4ZEQm9VeSBMk9B5st
$ openssl rand -base64 51
9oFAAOA5+FhsQRvpxGXo7vJPIHvZJvnn3GimK1Lym9zXJb5jO+qc0F/jJmDOhhxm
KecY
ディスカッション
コメント一覧
まだ、コメントがありません