擬似乱数列生成器(PRNG)を使ってランダムなバイト列を生成するコマンドのrandgenを作成しました。
Rustで実装しています。
インストール方法
randgenはcrates.ioで公開しているのでcargo installでインストールできます。
| |
また、リリースページでLinux、macOS、Windows向けのバイナリを公開しています。
使い方
randgen [オプション]... 生成するバイト数という形で利用できます。
生成するバイト数には1KiBや2 MBのように単位付きの値を指定できます。
256のように数値だけを指定したときは256 Bを指定したとみなします。
以下の例は1 KiBのランダムなバイト列を生成して標準出力に出力します。
| |
出力形式
生成したランダムなバイト列は以下の形式で出力できます。
raw(生のバイト列)base64(base64にエンコードして出力する)base64url(URLセーフなbase64にエンコードして出力する)hex(16進数文字列にエンコードして出力する)
デフォルトではraw形式で出力します。
出力形式を指定するには-fオプションが利用できます。
以下の例は256 Bのランダムなバイト列を生成して、それをbase64にエンコードして標準出力に出力します。
| |
対応しているPRNG
randgenはランダムなバイト列を生成するときに以下のPRNGを利用できます。
- ISAAC(コンパイル時に有効にしている場合)
- メルセンヌ・ツイスタ(コンパイル時に有効にしている場合)
- PCG(コンパイル時に有効にしている場合)
- SFC(コンパイル時に有効にしている場合)
- Xorshift系
- SplitMix64
- Xorshift(コンパイル時に有効にしている場合)
- xoroshiro
- xoshiro
また、以下の暗号論的擬似乱数生成器(CSPRNG)を利用できます。
デフォルトではchacha12をPRNGとして利用します。
PRNGを指定するには-rオプションが利用できます。
以下の例はPRNGとしてpcg64を使用して2 MBのランダムなバイト列を生成して標準出力に出力します。
| |
シード値の指定
-sオプションを使うことでPRNGで使用するシード値を指定できます。
シード値には符号なし64ビット整数を指定できます。
このオプションが指定されていないときは、シード値はLinuxのgetrandomシステムコールなどのOSの乱数列生成器から生成されます。
以下の例はシード値として8を指定し、PRNGとしてsfc32を使用して32 Bのランダムなバイト列を生成して、それを16進数文字列にエンコードして標準出力に出力します。
| |
作った理由
2月にSFCのRust実装のrand_sfcクレートを作りましたが、これを使った何かを作りたいと思ったので作りました。
複数のPRNGのサポートとシード値が指定できるところはPractRandのRNG_outputを参考にし、複数の形式で出力できるところはopenssl-randを参考にしています。