ランダムなバイト列を生成するコマンドを作成しました

擬似乱数列生成器(PRNG)を使ってランダムなバイト列を生成するコマンドのrandgenを作成しました。 Rustで実装しています。

インストール方法

randgencrates.ioで公開しているのでcargo installでインストールできます。

1
cargo install randgen

また、リリースページでLinux、macOS、Windows向けのバイナリを公開しています。

使い方

randgen [オプション]... 生成するバイト数という形で利用できます。 生成するバイト数には1KiB2 MBのように単位付きの値を指定できます。 256のように数値だけを指定したときは256 Bを指定したとみなします。

以下の例は1 KiBのランダムなバイト列を生成して標準出力に出力します。

1
randgen 1KiB

出力形式

生成したランダムなバイト列は以下の形式で出力できます。

  • raw(生のバイト列)
  • base64base64にエンコードして出力する)
  • base64urlURLセーフなbase64にエンコードして出力する)
  • hex(16進数文字列にエンコードして出力する)

デフォルトではraw形式で出力します。 出力形式を指定するには-fオプションが利用できます。

以下の例は256 Bのランダムなバイト列を生成して、それをbase64にエンコードして標準出力に出力します。

1
randgen -f base64 256

対応しているPRNG

randgenはランダムなバイト列を生成するときに以下のPRNGを利用できます。

  • ISAAC(コンパイル時に有効にしている場合)
  • メルセンヌ・ツイスタ(コンパイル時に有効にしている場合)
  • PCG(コンパイル時に有効にしている場合)
  • SFC(コンパイル時に有効にしている場合)
  • Xorshift系
    • SplitMix64
    • Xorshift(コンパイル時に有効にしている場合)
    • xoroshiro
    • xoshiro

また、以下の暗号論的擬似乱数生成器(CSPRNG)を利用できます。

  • ChaChaベースのCSPRNG
  • HC-128ベースのCSPRNG(コンパイル時に有効にしている場合)

デフォルトではchacha12をPRNGとして利用します。 PRNGを指定するには-rオプションが利用できます。

以下の例はPRNGとしてpcg64を使用して2 MBのランダムなバイト列を生成して標準出力に出力します。

1
randgen -r pcg64 "2 MB"

シード値の指定

-sオプションを使うことでPRNGで使用するシード値を指定できます。 シード値には符号なし64ビット整数を指定できます。 このオプションが指定されていないときは、シード値はLinuxのgetrandomシステムコールなどのOSの乱数列生成器から生成されます。

以下の例はシード値として8を指定し、PRNGとしてsfc32を使用して32 Bのランダムなバイト列を生成して、それを16進数文字列にエンコードして標準出力に出力します。

1
2
$ randgen -f hex -r sfc32 -s 8 32B
24f48cd0c3f6a1c6e8d7b4dcff9578864aced749e4eb1805dfba8b6e21d0cba0

作った理由

2月にSFCのRust実装のrand_sfcクレートを作りましたが、これを使った何かを作りたいと思ったので作りました。 複数のPRNGのサポートとシード値が指定できるところはPractRandRNG_outputを参考にし、複数の形式で出力できるところはopenssl-randを参考にしています。

この記事はCC BY 4.0の下でライセンスされています
最終更新 2025年3月13日 16:59 +0900
Hugo で構築されています。
テーマ StackJimmy によって設計されています。