擬似乱数列生成器(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
を参考にしています。